Three.js “人脸索引”是什么意思,它是如何工作的?

fra*_*pps 1 javascript three.js

我正在尝试使用 Three.js 创建一个不规则多面体。为此,我正在使用 PolyhedronGeometry文档)。问题是我不太明白是什么

索引 - 组成 [0,1,2, 2,3,0, ... ] 形式的面的索引数组

方法。因此,我在此JSfiddle 中创建的不规则四面体并未按应有的方式关闭所有面。

如何做到这一点?

这是我目前尝试创建四面体的方式:

var verticesOfCube = [-1,-1,-1,    1,-2.5,1,    1, 1,-1,    -1, 1,-1];
var indicesOfFaces = [2,1,0,    0,3,2,  3,2,1,    1,3,0];

// geometry
var geometry = new THREE.PolyhedronGeometry( verticesOfCube, indicesOfFaces, 10, 0 );

// material
var material1 = new THREE.MeshPhongMaterial( {
    color: 'sandybrown'
} );

// mesh
mesh = new THREE.Mesh( geometry, material1 );
mesh.position.set( 0, 0, 0 );
scene.add( mesh );
Run Code Online (Sandbox Code Playgroud)

man*_*rax 5

索引顶点缓冲区让您可以在更小的空间中存储更多的模型数据。

您可以跨多个三角形共享顶点,而不是每个三角形存储 3 个顶点,因为在大多数网格中..每个顶点由 3 个或更多三角形共享,这最终是一个非常大的胜利,并使模型渲染的性能更高好吧,因为顶点有更好的机会在顶点缓存中。

为了获得正确的面部剔除/向外法线生成,您需要按顺时针顺序声明顶点索引,就像您从模型外部直接看脸一样。

在实践中..如果你手工生成这些模型,你会尽最大努力在方格纸或其他东西上,然后看看它是如何显示的..找出哪些人脸没有正确面对,然后翻转那些人的索引面,因此如果它是 1,2,3,例如,将其更改为 3,2,1 以翻转法线。

FWIW:是你的 1,2,3 脸朝后。它应该是 3,2,1 或 2,1,3 或 1,3,2 ;D