【发布时间】:2014-11-22 02:56:08
【问题描述】:
如果我理解正确,THREE.Geometry 方法,.computeFaceNormals() & .computeVertexNormals(),每个都将值分配给一个“固有”属性数组,“正常”。
所以,如果我想在单个着色器中使用 both 顶点法线和面法线,我必须:
- 计算人脸法线
- 将结果(从“法线”)克隆到新的属性数组,(即“fNormals”)
- 计算顶点法线
- 渲染...
到目前为止,我正在使用这种方法:
var shader = new THREE.ShaderMaterial(
{
attributes: {
fNormal: { type: "v3", value: [] }
},
//uniforms, vertexShader, etc...
} );
//load a mesh & assign the shader to it...
//setup both vertex & face normals for use in shader
mesh.geometry.computeFaceNormals();
//clone above face-normals to 'fNormal' array:
for (var i=0; i < mesh.geometry.attributes[ 'normal' ].length; i++){
var cloned = mesh.geometry.attributes[ 'normal' ].value[i];
shader.attributes[ 'fNormal' ].value[i] = cloned;
}
//now calculate vertex normals & place them in the 'normal' attribute:
mesh.geometry.computeVertexNormals();
编辑:好的,意识到一些错误并在调试时对其进行编辑。仍然不确定如何处理生成的法线...
感谢您的任何见解-
【问题讨论】:
标签: javascript three.js glsl shader normals