Three.js 3.js。MeshPhongMaterial具有一种称为漫反射的均匀性。为什么它不暴露,也不能设置?
在Three.js 3.js。MeshPhongMaterial具有一种称为漫反射的均匀性。为什么它不暴露,也不能设置?,three.js,Three.js,在Three.js中,我正在仔细查看MeshPhongMaterial的glsl源代码。我注意到片段着色器依赖于名为diffuse的uniform。然而,似乎没有任何方法来设置它。还有一个名为color的uniform可以设置,它确实会改变漫反射颜色。嗯 是否将color复制到发动机罩下的diffuse?有人能帮我解开这个谜团吗。如果你仔细查看或搜索,你会发现它是根据材料的颜色设置的 例如网格材质不是着色器材质的子类,即使它们都扩展了材质 内部WebGLRenderer跟踪/知道如何处理两种不同
Three.js
中,我正在仔细查看MeshPhongMaterial的glsl
源代码。我注意到片段着色器依赖于名为diffuse
的uniform
。然而,似乎没有任何方法来设置它。还有一个名为color
的uniform
可以设置,它确实会改变漫反射颜色。嗯
是否将
color
复制到发动机罩下的diffuse
?有人能帮我解开这个谜团吗。如果你仔细查看或搜索,你会发现它是根据材料的颜色设置的
例如网格材质
不是着色器材质
的子类,即使它们都扩展了材质
内部WebGLRenderer
跟踪/知道如何处理两种不同的事情:
AnyShaderMaterial
任何制服。这意味着您可以使用ShaderMaterial
而不是myMaterial.color
制作myMaterial.uniforms.color
的网格材质的精确副本李>
“内置”材料及其特性。对于这些属性,WebGLRenderer
知道这些材质公开的所有可能属性。Gman已经指出了代码中发生这种情况的地方(其中一个地方)。对于每个材质WebGLRenderer
在内部创建一个ShaderMaterial
,但它不会像处理任何其他此类材质那样处理其制服,而是手动跟踪并更新所有内容李>
内置材质没有什么意义,因为您可以使用getter和setter轻松地将foo.bar
输送到foo.uniforms.bar
,使渲染器只处理着色器材质
如果您确实希望为内置材质创建统一,则必须等待渲染器创建统一,然后您可以使用material.onbeforecomile=shader=>{}
(着色器
对象将包含统一)。啊哈!坚持渲染器设置材质状态的原因。这显然应该是Material及其子类的责任。不干杯,哇。非常感谢。挠头已经停止了。我的从来没有停止过哈哈,我对这个设计毫无意义。你可能会发现这个很有用