国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Three.js學習之幾何形狀

2019-11-20 09:21:37
字體:
來源:轉載
供稿:網友

1.立方體

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

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

  width:x方向上的長度

  height:y方向上的長度

  depth:z方向上的長度

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

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

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

  未分段:

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)其實是一個長方形,而不是數學意義上無限大小的平面。其構造函數為:

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

  width:x方向上的長度

  height:y方向上的長度

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

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

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

 

3.球體

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

THREE.SphereGeometry(radius,segmentsWidth,segmentsHeight,phiStart, phiLength, thetaStart, thetaLength)// radius:半徑// segmentsWidth:經度上的分段數// segmentsHeight:緯度上的分段數// phiStart:經度開始的弧度// phiLength:經度跨過的弧度// thetaStart:緯度開始的弧度// thetaLength:緯度跨過的弧度

  3.1 經緯度分段數

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

 

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

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

 

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

 

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

 

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

  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的區域內劃分為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學習之幾何形狀的全部內容,小編陸續還會更新關于Three.js的文章,請大家繼續關注武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彝良县| 霍邱县| 赣榆县| 哈巴河县| 金溪县| 布拖县| 唐山市| 绵阳市| 永和县| 宁化县| 玉门市| 奉贤区| 赤水市| 泸州市| 习水县| 巫山县| 正阳县| 洪泽县| 黎平县| 嘉禾县| 龙南县| 东丰县| 通道| 湘阴县| 开鲁县| 永城市| 河北省| 诸城市| 寻乌县| 抚顺市| 淮滨县| 嵊州市| 安龙县| 南漳县| 从江县| 扬州市| 柘城县| 增城市| 榆林市| 阿荣旗| 新巴尔虎左旗|