最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Three.js學(xué)習(xí)之幾何形狀

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

1.立方體

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

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

  width:x方向上的長(zhǎng)度

  height:y方向上的長(zhǎng)度

  depth:z方向上的長(zhǎng)度

  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);

}


  物體的默認(rèn)位置是原點(diǎn),對(duì)于立方體而言,是其幾何中心在原點(diǎn)的位置。

  分段:

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

  為什么會(huì)有這么多邪線呢?版本問(wèn)題。R73版本:

 

  注意這個(gè)分段是對(duì)六個(gè)面進(jìn)行分段,而不是對(duì)立方體的體素分段,因此在立方體的中間是不分段的,只有六個(gè)側(cè)面被分段。

2.平面

  這里的平面(PlaneGeometry)其實(shí)是一個(gè)長(zhǎng)方形,而不是數(shù)學(xué)意義上無(wú)限大小的平面。其構(gòu)造函數(shù)為:

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

  width:x方向上的長(zhǎng)度

  height:y方向上的長(zhǎng)度

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

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

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

 

3.球體

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

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

// radius:半徑

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

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

// phiStart:經(jīng)度開(kāi)始的弧度

// phiLength:經(jīng)度跨過(guò)的弧度

// thetaStart:緯度開(kāi)始的弧度

// thetaLength:緯度跨過(guò)的弧度

  3.1 經(jīng)緯度分段數(shù)

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

 

  segmentsWidth相當(dāng)于經(jīng)度被切成了幾瓣,而segmentsHeight相當(dāng)于緯度被切成了幾層。

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

 

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

 

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

 

  在圖形底層的實(shí)現(xiàn)中,并沒(méi)有曲線的概念,曲線都是由多個(gè)折線近似構(gòu)成的。對(duì)于球體而言,當(dāng)這兩個(gè)值較大的時(shí)候,形成的多面體就可以近似看做是球體了。 

  3.2 經(jīng)度弧度

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

效果如下:

 

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

  3.3 緯度弧度

  緯度弧度同理。new THREE.SphereGeometry(3, 8, 6, 0, Math.PI * 2, Math.PI / 6, Math.PI / 3)表示緯度從Math.PI / 6跨過(guò)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測(cè)試四</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);
      
      // 材質(zhì)
      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學(xué)習(xí)之幾何形狀的全部?jī)?nèi)容,小編陸續(xù)還會(huì)更新關(guān)于Three.js的文章,請(qǐng)大家繼續(xù)關(guān)注腳本之家。

相關(guān)文章

  • 淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    以AngularJS為代表的MVVM結(jié)構(gòu)框架或庫(kù)這兩年來(lái)在前端界真是火到不行,大有對(duì)抗傳統(tǒng)jQuery綁定思想的趨勢(shì),這里我們結(jié)合傳統(tǒng)的MVC結(jié)構(gòu),來(lái)淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)
    2016-06-06
  • js類庫(kù)styled-components快速入門(mén)教程

    js類庫(kù)styled-components快速入門(mén)教程

    這篇文章主要為大家介紹了js類庫(kù)styled-components快速入門(mén)的教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Three.js學(xué)習(xí)之正交投影照相機(jī)

    Three.js學(xué)習(xí)之正交投影照相機(jī)

    本篇主要介紹照相機(jī)中的正交投影照相機(jī)。學(xué)習(xí)Three.js的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • 組件庫(kù)Monmrepo架構(gòu)與開(kāi)發(fā)調(diào)試環(huán)境構(gòu)建詳解

    組件庫(kù)Monmrepo架構(gòu)與開(kāi)發(fā)調(diào)試環(huán)境構(gòu)建詳解

    這篇文章主要為大家介紹了組件庫(kù)Monmrepo架構(gòu)與開(kāi)發(fā)調(diào)試環(huán)境構(gòu)建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • JavaScript庫(kù)omit源碼解析

    JavaScript庫(kù)omit源碼解析

    這篇文章主要為大家介紹了JavaScript庫(kù)omit源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Highcharts入門(mén)之基本屬性

    Highcharts入門(mén)之基本屬性

    Highcharts是一個(gè)用純JavaScript編寫(xiě)的一個(gè)圖表庫(kù),之前小編發(fā)了一篇介紹Highcharts的文章,那么本文將進(jìn)一步的介紹Highcharts的基本屬性,有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • JS日程管理插件FullCalendar簡(jiǎn)單實(shí)例

    JS日程管理插件FullCalendar簡(jiǎn)單實(shí)例

    JS日程管理插件FullCalendar是一款基于jQuery的日歷日程插件,適用于各種日程安排、工作計(jì)劃等場(chǎng)景,您可以很方便的查看查看待辦事項(xiàng),標(biāo)記重要事項(xiàng)以及綁定點(diǎn)擊和拖動(dòng)事件,能快速的整合到您的項(xiàng)目中,本文將簡(jiǎn)單介紹FullCalendar的使用
    2017-02-02
  • 基于d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖

    基于d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖

    本文用實(shí)例演示如何用d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-08-08
  • Highcharts入門(mén)之簡(jiǎn)介

    Highcharts入門(mén)之簡(jiǎn)介

    Highcharts 是一個(gè)用純JavaScript編寫(xiě)的一個(gè)圖表庫(kù), 能夠很簡(jiǎn)單便捷的在web網(wǎng)站或是web應(yīng)用程序添加有交互性的圖表,并且免費(fèi)提供給個(gè)人學(xué)習(xí)、個(gè)人網(wǎng)站和非商業(yè)用途使用。下面通過(guò)本文的介紹及實(shí)例一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-08-08
  • 分享5個(gè)好用的javascript文件上傳插件

    分享5個(gè)好用的javascript文件上傳插件

    本文為大家分享了5個(gè)不錯(cuò)的javascript文件上傳插件,選擇一款功能強(qiáng)大使用簡(jiǎn)單的上傳插件將為我們節(jié)省很多開(kāi)發(fā)時(shí)間
    2018-09-09

最新評(píng)論

福州市| 太和县| 鞍山市| 鄂托克前旗| 广饶县| 盐城市| 杂多县| 兰考县| 宜兰市| 五河县| 姚安县| 武冈市| 英超| 张家界市| 页游| 鄱阳县| 同德县| 义乌市| 喜德县| 高雄县| 阿尔山市| 阿勒泰市| 明光市| 南康市| 正安县| 安西县| 安国市| 大城县| 抚松县| 五原县| 滦南县| 法库县| 南皮县| 石嘴山市| 莫力| 汉阴县| 自治县| 达拉特旗| 霍城县| 中江县| 项城市|