繁体   English   中英

在自定义着色器中未设置three.js .mtl属性

[英]three.js .mtl attributes not being set in custom shader

我正在创建一个自定义three.js应用程序,在其中加载OBJ / MTL模型进行渲染。 我想对加载的模型应用自定义着色器,但是手动更新到RawShaderMaterial的颜色和镜面反射制服没有得到更新。 或更确切地说,它们都填充有相同的值。 从而使我的模型具有相同的颜色。

他是一些示例代码。 如果有一个简单的解决方案或更好的方法,我将非常有兴趣知道。

var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath(path);
mtlLoader.load(mtlName, function(materials) {
var objLoader = new THREE.OBJLoader();
materials.preload();


objLoader.setMaterials(materials);


objLoader.setPath(path);
objLoader.load(objName, function(object) {
    if (shader) {
        object.traverse(function (child) {
            if (child instanceof THREE.Mesh) {
                var customShader = shader;
                var color = child.material["color"];
                customShader.uniforms["color"] = {type: 'v3', value: color};
                customShader.uniforms["specular"] = {type: 'v3', value: child.material["specular"]};

                child.material = customShader; 
            }
       });
    }
}

顶点着色器:精确的中浮; 精密mediap int;

    uniform mat4 modelViewMatrix;
    uniform mat4 projectionMatrix;

    attribute vec3 position;
    attribute vec3 normal;
    attribute vec2 uv;

    varying vec3 Normal;
    varying vec2 UV;

    void main() {
        Normal = normal;
        UV = uv;
        gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }

片段着色器:精确的中浮; 精密mediap int;

    uniform vec3 color;
    uniform vec3 specular;

    varying vec3 Normal;
    varying vec2 UV;

    void main() {
        gl_FragColor = vec4(color, 1.0);
    }

我发现了我的问题。

仅仅是因为我没有正确克隆我的ShaderMaterial。

object.traverse(function (child) {
        if (child instanceof THREE.Mesh) {
            var customShader = shader.clone();
            var color = child.material["color"];
            customShader.uniforms["color"] = {type: 'v3', value: color};
            customShader.uniforms["specular"] = {type: 'v3', value: child.material["specular"]};

            child.material = customShader; 
        }
   });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM