【问题标题】:three.js .mtl attributes not being set in custom shader三.js .mtl 属性未在自定义着色器中设置
【发布时间】:2017-01-03 12:07:29
【问题描述】:

我正在创建一个自定义 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; 
            }
       });
    }
}

顶点着色器: 精度 mediump 浮点数; 精度中等;

    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);
    }

片段着色器: 精度 mediump 浮点数; 精度中等;

    uniform vec3 color;
    uniform vec3 specular;

    varying vec3 Normal;
    varying vec2 UV;

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

【问题讨论】:

    标签: javascript opengl-es three.js glsl .obj


    【解决方案1】:

    我发现了我的问题。

    这仅仅是因为我没有正确克隆我的 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; 
            }
       });
    

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 2017-08-07
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2017-03-28
      • 2020-05-11
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多