Rendering custom geometry in Three.js

徘徊边缘 提交于 2019-12-07 09:25:03

问题


I am trying to draw a quad between four vertices in the space using three.js. I have written the following code but it doesn't work:

var a = { x:10,
            y:10}
var b = {x:50,
           y:50}

var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( a.x, a.y, 2 ) );
geometry.vertices.push( new THREE.Vector3( b.x, b.y, 2 ) );
geometry.vertices.push( new THREE.Vector3( b.x, b.y - 60, 2 ) );
geometry.vertices.push( new THREE.Vector3( a.x, a.y, 2 ) );
geometry.faces.push( new THREE.Face3(0,1,2) );
geometry.computeFaceNormals();
var material = new THREE.MeshBasicMaterial({ color: "0xff1100"});
var mesh = new THREE.Mesh( geometry, material );
scene.add(mesh);

where am I making a mistake? By the way, to render quads, can I use Face4 or do I have to use Face3? Is there any good source for learning webgl features all in one place? Three.js documentation is very well organized and complete.


回答1:


Quads are no longer supported. You need to use two Face3s, like so:

var a = { x:10,
          y:10 }
var b = { x:50,
          y:50 }

var geometry = new THREE.Geometry();

geometry.vertices.push( new THREE.Vector3( a.x, a.y, 2 ) );
geometry.vertices.push( new THREE.Vector3( b.x, a.y, 2 ) );
geometry.vertices.push( new THREE.Vector3( b.x, b.y, 2 ) );
geometry.vertices.push( new THREE.Vector3( a.x, b.y, 2 ) );

geometry.faces.push( new THREE.Face3( 0, 1, 2 ) ); // counter-clockwise winding order
geometry.faces.push( new THREE.Face3( 0, 2, 3 ) );

geometry.computeFaceNormals();
geometry.computeVertexNormals();

Tip: set material.side = THREE.DoubleSide so both sides of your geometry render. You can set it back to THREE.FrontSide when you are sure your geometry is correct.

For advice on learning three.js and WebGL see Learning WebGL and three.js

three.js r.70



来源:https://stackoverflow.com/questions/19085369/rendering-custom-geometry-in-three-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!