Animation 更新three.js中动画蒙皮网格的法线?
我有一个简单的动画模型,通过蒙皮设置动画,我给它一个Animation 更新three.js中动画蒙皮网格的法线?,animation,three.js,shader,normals,Animation,Three.js,Shader,Normals,我有一个简单的动画模型,通过蒙皮设置动画,我给它一个ShaderMaterial,显示其法线: gl_FragColor = vec4(vNormal, 1.0); 问题在于法线不会随模型蒙皮而更新,并且它们始终保持在对象的非动画位置(请参见VertexNormalsHelper) 如何获取要更新的法线,或者如何获取动画顶点的法线 model.geometry.computeVertexNormals()不起作用 我最后修补了MeshNormalMaterial顶点着色器,并删除了法线相对于
ShaderMaterial
,显示其法线:
gl_FragColor = vec4(vNormal, 1.0);
问题在于法线不会随模型蒙皮而更新,并且它们始终保持在对象的非动画位置(请参见VertexNormalsHelper
)
如何获取要更新的法线,或者如何获取动画顶点的法线
model.geometry.computeVertexNormals()
不起作用
我最后修补了
MeshNormalMaterial
顶点着色器,并删除了法线相对于摄影机的逻辑,以下是最终代码:
import*作为“三”中的三个
从“三个/src/renders/shaders/ShaderLib/normal_vert.glsl”导入normalVert
//与MeshNormalMaterial类似,但法线是相对于世界而不是摄影机的
常量normalMaterialGlobalvert=normalVert.replace(
"包括",,
三.ShaderChunk['defaultnormal_vertex']。替换(
'transformedNormal=normalMatrix*transformedNormal;',
//仅考虑模型矩阵
'transformedNormal=mat3(modelMatrix)*transformedNormal;'
)
)
然后像这样使用它:
mesh.material=new THREE.ShaderMaterial({
vertexShader:normalMaterialGlobalvert,
碎片着色器:`
可变vec3 vNormal;
void main(){
gl_FragColor=vec4(vNormal,1.0);
}
`,
})
谢谢你给我指明了正确的方向 使用
着色器材质
似乎不会显示法线。也许用这个。否则,如果要修改标准材质,则需要使用Material.onBeforeCompile
,以便获得所有蒙皮和其他功能。有一个例子是使用onBeforeCompile
我正在用法线做其他事情,所以我需要使用自定义着色器。你知道我应该在onBeforeCompile
中的着色器中注入什么吗?完成,谢谢!你的回答很有帮助!