【发布时间】:2020-03-01 23:08:09
【问题描述】:
我想修改雾的片段,但是我遇到了问题,材质没有应用更改。
我这么修改代码
THREE.ShaderChunk[ "fog_pars_fragment" ] = [
'...'
].join("\n");
代码的修改发生在整个场景加载后的最后。
我试过了
scene.traverse(function(object){
if(object.material){
object.material.needsUpdate = true;
}
})
但是什么都没有改变:(
【问题讨论】:
-
修改
ShaderChunk只会修改该块的文本代码。创建材质时,ShaderChunks 被组装并连接(未引用)到最终的着色器代码中。这就是事后更改代码没有效果的原因。与其修改现有材质,不如考虑创建自己的命名材质 (THREE.MyPhongMaterial = ...),它可以使用自定义雾块 (THREE.ShaderChunk[ "my_fog_fragment" ] = ...)。 -
三个应该在某个点触发着色器重新编译。我不知道它在做什么。我认为
needsUpdate会起作用。 github.com/mrdoob/three.js/issues/11475 -
@TheJim01 我有不同的材质,包括骨架,所以我无法创建自己的着色器)我再次尝试添加光源,因为我知道库会重建程序。但是有些东西没有帮助,我会进一步尝试)
-
我不明白你的担心。你并不局限于一个着色器来处理所有事情。您可以根据需要创建任意数量的着色器和材质。或许添加一个简化的用例(向我们展示您如何将材料应用到您的对象)可以帮助阐明您的立场。
-
我用的是标准材质,一个例子dt-byte.ru/f9c96cb3.png雾用于所有材质,我只是想修改雾,但是雾只有三个参数(颜色,远,近)这些参数对我来说还不够,我也不能在雾中添加制服。我找到了一个办法,修改雾之后,你只需要清除场景并重新加载)
标签: three.js