Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 更新three.js中动画蒙皮网格的法线?_Animation_Three.js_Shader_Normals - Fatal编程技术网

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
中的着色器中注入什么吗?完成,谢谢!你的回答很有帮助!