在中间绘制等边三角形

时间:2015-09-19 08:27:41

标签: three.js

我想在场景中间绘制一个三角形,所以我像这样推顶点并且有效:

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

为什么会这样?我在文档中找不到任何关于此的内容。

1 个答案:

答案 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