我想在场景中间绘制一个三角形,所以我像这样推顶点并且有效:
geom.vertices.push(new THREE.Vector3(-1, 0, 0));
geom.vertices.push(new THREE.Vector3(1, 0, 0));
geom.vertices.push(new THREE.Vector3(0, 1, 0));
我的问题是,如果我重新排序推送方法,三角形不会被渲染,我不明白为什么,例如:
geom.vertices.push(new THREE.Vector3(1, 0, 0));
geom.vertices.push(new THREE.Vector3(-1, 0, 0));
geom.vertices.push(new THREE.Vector3(0, 1, 0));
为什么会这样?我在文档中找不到任何关于此的内容。
答案 0 :(得分:1)
在3D中,当您在three.js中调用geometry.computeFaceNormals()
时,每个面都有一个正常属性。如果脸部法线指向相机,则会绘制脸部,否则不会。如何确定脸的哪一侧是正面?它取决于顶点的顺序。如果你看一张脸,如果它的3个顶点的指数顺时针增长,你就会看到正面。否则它就是背面。它被称为缠绕顺序。
我猜你没有在面部声明new THREE.Face3(0,1,2)
中更改它们的索引,但是如果你改变它们数组中顶点的顺序,它当然是相同的。
所以实际上你现在正在从背后看你的脸。您可以通过更改相机的视角来查看它(更改顺序并将相机移至this fiddle中的背面)。
如果您不想担心上弦顺序并且能够从任何角度观看人脸,则three.js会在material
参数中为您提供:只需添加
side:THREE.DoubleSide //default is THREE.FrontSide, there also is THREE.BackSide