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
Three.js 3.js。MeshPhongMaterial具有一种称为漫反射的均匀性。为什么它不暴露,也不能设置?_Three.js - Fatal编程技术网

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
跟踪/知道如何处理两种不同的事情:

  • Any
    ShaderMaterial
    任何制服。这意味着您可以使用
    ShaderMaterial
    而不是
    myMaterial.color
    制作
    myMaterial.uniforms.color
    的网格材质的精确副本
  • “内置”材料及其特性。对于这些属性,
    WebGLRenderer
    知道这些材质公开的所有可能属性。Gman已经指出了代码中发生这种情况的地方(其中一个地方)。对于每个材质
    WebGLRenderer
    在内部创建一个
    ShaderMaterial
    ,但它不会像处理任何其他此类材质那样处理其制服,而是手动跟踪并更新所有内容 内置材质没有什么意义,因为您可以使用getter和setter轻松地将
    foo.bar
    输送到
    foo.uniforms.bar
    ,使渲染器只处理着色器材质


    如果您确实希望为内置材质创建统一,则必须等待渲染器创建统一,然后您可以使用
    material.onbeforecomile=shader=>{}
    (着色器
  • 对象将包含统一)。

    啊哈!坚持渲染器设置材质状态的原因。这显然应该是Material及其子类的责任。不干杯,哇。非常感谢。挠头已经停止了。我的从来没有停止过哈哈,我对这个设计毫无意义。你可能会发现这个很有用