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

首頁 > 編程 > JavaScript > 正文

Three.js學(xué)習(xí)之網(wǎng)格

2019-11-20 09:16:13
字體:
供稿:網(wǎng)友

前言

  小編之前發(fā)布過關(guān)于幾何形狀材質(zhì),相信大家看過學(xué)習(xí)之后,我們就能使用他們來創(chuàng)建物體了。最常用的一種物體就是網(wǎng)格(Mesh),網(wǎng)格是由頂點(diǎn)、邊、面等組成的物體;其他物體包括線段(Line)、骨骼(Bone)、粒子系統(tǒng)(ParticleSystem)等。創(chuàng)建物體需要指定幾何形狀和材質(zhì),其中,幾何形狀決定了物體的頂點(diǎn)位置等信息,材質(zhì)決定了物體的顏色、紋理等信息。

1.創(chuàng)建網(wǎng)格

  在前幾篇中,我們學(xué)習(xí)了如何創(chuàng)建幾何形狀材質(zhì),而網(wǎng)格的創(chuàng)建非常簡單,只要把幾何形狀與材質(zhì)傳入其構(gòu)造函數(shù)。最常用的物體是網(wǎng)格(Mesh),它代表包含點(diǎn)、線、面的幾何體,其構(gòu)造函數(shù)是:

Mesh(geometry, material)

  下面,讓我們通過一個(gè)具體的例子了解如何創(chuàng)建網(wǎng)格:

var material = new THREE.MeshLambertMaterial({ color: 0xffff00});var geometry = new THREE.CubeGeometry(1, 2, 3);var mesh = new THREE.Mesh(geometry, material);scene.add(mesh);

  如果material和geometry之后不會(huì)復(fù)用的話,也可以合在一起寫為:

var mesh = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), new THREE.MeshLambertMaterial({  color: 0xffff00 }));scene.add(mesh);

  添加光照后,得到的效果為:

  如果不指定material,則每次會(huì)隨機(jī)分配一種wireframe為true的材質(zhì),每次刷新頁面后的顏色是不同的,一種可能的效果是:

  源碼:

<!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <title>3.js測試9.1</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(-2.5, 2.5, 1.875, -1.875, 0.1, 100);   camera.position.set(5, 5, 20);   camera.lookAt(new THREE.Vector3(0, 0, 0));   scene.add(camera);      var material = new THREE.MeshLambertMaterial({    color: 0xffff00   });//   var material = new THREE.MeshBasicMaterial({//    color: 0xffff00,//    wireframe: true//   });   var geometry = new THREE.CubeGeometry(1, 2, 3);   var mesh = new THREE.Mesh(geometry, material);   scene.add(mesh);      var light = new THREE.DirectionalLight(0xffffff);   light.position.set(20, 10, 5);   scene.add(light);      // render   renderer.render(scene, camera);  } </script></html>
 

2.修改屬性

  2.1 修改材質(zhì)

  除了在構(gòu)造函數(shù)中指定材質(zhì),在網(wǎng)格被創(chuàng)建后,也能對(duì)材質(zhì)進(jìn)行修改:

var material = new THREE.MeshLambertMaterial({ color: 0xffff00});var geometry = new THREE.CubeGeometry(1, 2, 3);var mesh = new THREE.Mesh(geometry, material); scene.add(mesh);mesh.material = new THREE.MeshLambertMaterial({ color: 0xff0000});

  最終顯示的顏色是紅色:

  源碼:

<!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <title>3.js測試9.2</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(-2.5, 2.5, 1.875, -1.875, 0.1, 100);   camera.position.set(5, 5, 20);   camera.lookAt(new THREE.Vector3(0, 0, 0));   scene.add(camera);      var material = new THREE.MeshLambertMaterial({    color: 0xffff00   });   var geometry = new THREE.CubeGeometry(1, 2, 3);   var mesh = new THREE.Mesh(geometry, material);   scene.add(mesh);      mesh.material = new THREE.MeshLambertMaterial({    color: 0xff0000   });      var light = new THREE.DirectionalLight(0xffffff);   light.position.set(20, 10, 5);   scene.add(light);      // render   renderer.render(scene, camera);  } </script></html>

  2.2 位置、縮放、旋轉(zhuǎn)

  位置、縮放、旋轉(zhuǎn)是物體三個(gè)常用屬性。由于THREE.Mesh基礎(chǔ)自THREE.Object3D,因此包含scale、rotation、position三個(gè)屬性。它們都是THREE.Vector3實(shí)例,因此修改其值的方法是相同的,這里以位置為例。

  THREE.Vector3有x、y、z三個(gè)屬性,如果只設(shè)置其中一個(gè)屬性,則可以用以下方法:

mesh.position.z = 1;

  如果需要同時(shí)設(shè)置多個(gè)屬性,可以使用以下兩種方法:

mesh.position.set(1.5, -0.5, 0);

  或者:

mesh.position = new THREE.Vector3(1.5, -0.5, 0);

  縮放對(duì)應(yīng)的屬性是scale,旋轉(zhuǎn)對(duì)應(yīng)的屬性是rotation,具體方法與上例相同,分別表示沿x、y、z三軸縮放或旋轉(zhuǎn)。

 

  源碼:

<!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <title>3.js測試9.3</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(-2.5, 2.5, 1.875, -1.875, 0.1, 100);   camera.position.set(5, 5, 20);   camera.lookAt(new THREE.Vector3(0, 0, 0));   scene.add(camera);      var material = new THREE.MeshLambertMaterial({    color: 0xffff00   });   var geometry = new THREE.CubeGeometry(1, 2, 3);   var mesh = new THREE.Mesh(geometry, material);   scene.add(mesh);      mesh.position.set(1.5, -0.5, 0);   mesh.position = new THREE.Vector3(1.5, -0.5, 0);   mesh.position.z = 1;      var light = new THREE.DirectionalLight(0xffffff);   light.position.set(20, 10, 5);   scene.add(light);      drawAxes(scene);      // render   renderer.render(scene, camera);  }    function drawAxes(scene) {   // x-axis   var xGeo = new THREE.Geometry();   xGeo.vertices.push(new THREE.Vector3(0, 0, 0));   xGeo.vertices.push(new THREE.Vector3(1, 0, 0));   var xMat = new THREE.LineBasicMaterial({    color: 0xff0000   });   var xAxis = new THREE.Line(xGeo, xMat);   scene.add(xAxis);      // y-axis   var yGeo = new THREE.Geometry();   yGeo.vertices.push(new THREE.Vector3(0, 0, 0));   yGeo.vertices.push(new THREE.Vector3(0, 1, 0));   var yMat = new THREE.LineBasicMaterial({    color: 0x00ff00   });   var yAxis = new THREE.Line(yGeo, yMat);   scene.add(yAxis);      // z-axis   var zGeo = new THREE.Geometry();   zGeo.vertices.push(new THREE.Vector3(0, 0, 0));   zGeo.vertices.push(new THREE.Vector3(0, 0, 1));   var zMat = new THREE.LineBasicMaterial({    color: 0x00ccff   });   var zAxis = new THREE.Line(zGeo, zMat);   scene.add(zAxis);  } </script></html>

本文的內(nèi)容到這就結(jié)束了,文章通過詳細(xì)實(shí)例及圖片介紹了Three.js中的網(wǎng)格,希望本文對(duì)大家學(xué)習(xí)Three.js有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陆河县| 黔江区| 昭通市| 特克斯县| 扶余县| 林甸县| 丹巴县| 垣曲县| 监利县| 呼玛县| 工布江达县| 陵川县| 南昌县| 泉州市| 慈溪市| 翁牛特旗| 绍兴市| 宽城| 塘沽区| 普洱| 靖远县| 安达市| 平阳县| 古蔺县| 嫩江县| 商城县| 綦江县| 大厂| 焉耆| 桦甸市| 文昌市| 子洲县| 呼玛县| 穆棱市| 顺义区| 温宿县| 屏南县| 定襄县| 苍山县| 玛纳斯县| 瓦房店市|