我正在使用 THREE.js 和 BufferGeometry 来创建基于图像的一组点的视图。目前,我有以下内容:
可以看出,我构建的“对象”具有只能按预期从相反侧看到的面。
我已经用一组具有相应法线数组的点构建了我的 BufferGeometry,像这样实现(假设顶点和规范是有效的):
vertices = Float32Array.from(verts)
normals = Float32Array.from(norms)
// Make new geometry
geometry = new THREE.BufferGeometry();
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3))
geometry.setAttribute('normal', new THREE.BufferAttribute(normals, 3))
material = new THREE.MeshPhongMaterial({color: 0xffffff})
mesh = new THREE.Mesh(geometry, material)
geometry.computeVertexNormals()
scene.add(mesh)
正如您从尝试添加法线数组中看到的那样,我尝试添加所有为 (0,1,0) 的法线。没有geometry.computeVertexNormals()
,这仍然会导致没有一个面是实心的/行为正确的。这样,就生成了图像中的结果。
什么可能导致固体表现出这样的行为?