欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Three.js學習之幾何形狀

 更新時間:2016年08月01日 11:08:12   投稿:daisy  
本文利用實例代碼詳細介紹了一些Three.js中的幾何形狀的實現(xiàn)過程,包括立方體、平面與球體,有需要的朋友們可以學習下。

1.立方體

  雖然這一形狀的名字叫立方體(CubeGeometry),但它其實是長方體,也就是長寬高可以設置為不同的值。其構造函數(shù)是:

THREE.CubeGeometry(width,height,depth,widthSegments,heightSegments, depthSegments)

  width:x方向上的長度

  height:y方向上的長度

  depth:z方向上的長度

  widthSegments:x方向上的分段數(shù)(可選,缺省值1)

  heightSegments:y方向上的分段數(shù)(同上)

  depthSegments:z方向上的分段數(shù)(同上) 

  未分段:

var material = new THREE.MeshBasicMaterial({

  color: 0xffff00,

  wireframe: true

});

drawCube(scene, material);

function drawCube(scene, material) {

  var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), material);

  scene.add(cube);

}


  物體的默認位置是原點,對于立方體而言,是其幾何中心在原點的位置。

  分段:

var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3, 2, 2, 3), material);

  為什么會有這么多邪線呢?版本問題。R73版本:

 

  注意這個分段是對六個面進行分段,而不是對立方體的體素分段,因此在立方體的中間是不分段的,只有六個側面被分段。

2.平面

  這里的平面(PlaneGeometry)其實是一個長方形,而不是數(shù)學意義上無限大小的平面。其構造函數(shù)為:

THREE.PlaneGeometry(width, height, widthSegments, heightSegments) 

  width:x方向上的長度

  height:y方向上的長度

  widthSegments:x方向上的分段數(shù)(可選,缺省值1)

  heightSegments:y方向上的分段數(shù)(同上)

  new THREE.PlaneGeometry(2, 4);創(chuàng)建的平面在x軸和y軸所在平面內,效果如下:

 

3.球體

  球體(SphereGeometry)的構造函數(shù)是:

THREE.SphereGeometry(radius,segmentsWidth,segmentsHeight,phiStart, phiLength, thetaStart, thetaLength)

// radius:半徑

// segmentsWidth:經度上的分段數(shù)

// segmentsHeight:緯度上的分段數(shù)

// phiStart:經度開始的弧度

// phiLength:經度跨過的弧度

// thetaStart:緯度開始的弧度

// thetaLength:緯度跨過的弧度

  3.1 經緯度分段數(shù)

  首先,我們來理解下segmentsWidth和segmentsHeight。使用var sphere = new THREE.SphereGeometry(3, 8, 6)可以創(chuàng)建一個半徑為3,經度劃分成8份,緯度劃分成6份的球體,如下圖所示。

 

  segmentsWidth相當于經度被切成了幾瓣,而segmentsHeight相當于緯度被切成了幾層。

  new THREE.SphereGeometry(3, 5, 4)的效果:

 

  new THREE.SphereGeometry(3, 8, 6)的效果:

 

  new THREE.SphereGeometry(3, 18, 12)的效果:

 

  在圖形底層的實現(xiàn)中,并沒有曲線的概念,曲線都是由多個折線近似構成的。對于球體而言,當這兩個值較大的時候,形成的多面體就可以近似看做是球體了。 

  3.2 經度弧度

  new THREE.SphereGeometry(3, 8, 6, Math.PI / 6, Math.PI / 3)表示起始經度為Math.PI / 6,經度跨度為Math.PI / 3。

效果如下:

 

  注意,這里segmentsWidth為8意味著對于經度從Math.PI / 6跨過Math.PI / 3的區(qū)域內劃分為8塊,而不是整個球體的經度劃分成8塊后再判斷在此經度范圍內的部分。 

  3.3 緯度弧度

  緯度弧度同理。new THREE.SphereGeometry(3, 8, 6, 0, Math.PI * 2, Math.PI / 6, Math.PI / 3)表示緯度從Math.PI / 6跨過Math.PI / 3。

效果如下:

 

  new THREE.SphereGeometry(3, 8, 6, Math.PI / 2, Math.PI, Math.PI / 6, Math.PI / 2)的效果:

 

4.源碼

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>3.js測試四</title>
  </head>
  <body onload="init()">
    <canvas id="mainCanvas" width="400px" height="300px" ></canvas>
  </body>
  <script type="text/javascript" src="js/three.min.js"></script>
  <script type="text/javascript">
    function init() {
      var renderer = new THREE.WebGLRenderer({
        canvas: document.getElementById('mainCanvas')
      });
      renderer.setClearColor(0x000000);
      var scene = new THREE.Scene();
      
      // camera
      var camera = new THREE.OrthographicCamera(-5, 5, 3.75, -3.75, 0.1, 100);
      camera.position.set(25, 25, 25);
      camera.lookAt(new THREE.Vector3(0, 0, 0));
      scene.add(camera);
      
      // 材質
      var material = new THREE.MeshBasicMaterial({
        color: 0xffff00,
        wireframe: true
      });
      
      drawCube(scene, material);    //立方體
//     drawPlane(scene, material);    //平面
//     drawSphere(scene, material);  //球體
      
      // render
      renderer.render(scene, camera);
    }
    
    function drawCube(scene, material) {
      var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3, 2, 2, 3), material);
      scene.add(cube);
    }
    
    function drawPlane(scene, material) {
      var plane = new THREE.Mesh(new THREE.PlaneGeometry(2, 4), material);
      scene.add(plane);
    }
    
    function drawSphere(scene, material) {
      var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 18, 12), material);
//     var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, Math.PI / 6, Math.PI / 3), material);
//     var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, 0, Math.PI * 2, Math.PI / 6, Math.PI / 3), material);
//      var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, Math.PI / 2, Math.PI, Math.PI / 6, Math.PI / 2), material);
      scene.add(sphere);
    }
  </script>
</html>

以上就是Three.js學習之幾何形狀的全部內容,小編陸續(xù)還會更新關于Three.js的文章,請大家繼續(xù)關注腳本之家。

相關文章

  • 組件庫Monmrepo架構與開發(fā)調試環(huán)境構建詳解

    組件庫Monmrepo架構與開發(fā)調試環(huán)境構建詳解

    這篇文章主要為大家介紹了組件庫Monmrepo架構與開發(fā)調試環(huán)境構建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 淺談輕量級js模板引擎simplite

    淺談輕量級js模板引擎simplite

    這篇文章主要介紹了淺談輕量級js模板引擎simplite的簡介和用法的相關資料,需要的朋友可以參考下
    2015-02-02
  • Highcharts學習之數(shù)據(jù)列

    Highcharts學習之數(shù)據(jù)列

    數(shù)據(jù)列配置是 Highcharts 最復雜也是最靈活的配置,如果說 Highcharts 是靈活多變,細節(jié)可定制的話,那么數(shù)據(jù)列配置就是這個重要特性的核心。
    2016-08-08
  • 交互式可視化js庫gojs使用介紹及技巧

    交互式可視化js庫gojs使用介紹及技巧

    這篇文章主要介紹了如何使用可視化庫gojs及使用時的小技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2022-01-01
  • Three.js學習之文字形狀及自定義形狀

    Three.js學習之文字形狀及自定義形狀

    今天小編帶大家學習的是Three.js的文字形狀與自定義形狀,文章內容很詳細,對大家學習Three.js或許有幫助,下面一起來看看吧。
    2016-08-08
  • Three.js學習之網格

    Three.js學習之網格

    本篇將先介紹創(chuàng)建較為常用的物體:網格,然后介紹如何修改物體的屬性。下面跟著小編一起來學習學習。
    2016-08-08
  • 精通JavaScript 糾正 cleanWhitespace函數(shù)

    精通JavaScript 糾正 cleanWhitespace函數(shù)

    這個函數(shù)用在火狐(firefox)上面老是出錯,今天仔細研究了下,改正了,希望別人不要遇到我這樣的問題
    2010-03-03
  • JavaScript庫omit源碼解析

    JavaScript庫omit源碼解析

    這篇文章主要為大家介紹了JavaScript庫omit源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Three.js學習之Lamber材質和Phong材質

    Three.js學習之Lamber材質和Phong材質

    本篇將介紹基本材質以及兩種基于光照模型的材質(Lamber與Phong),有需要的小伙伴們可以參考學習。
    2016-08-08
  • Highcharts學習之坐標軸

    Highcharts學習之坐標軸

    今天講交互圖表Highcharts的坐標軸,我們將對Highcharts圖表的坐標軸組成、坐標軸類型等進行詳細系統(tǒng)講解。下面一起來看看。
    2016-08-08

最新評論