2

有没有办法替换通过 Three.js 库中的 Collada 加载器导入的简单 3D 模型中的所有纹理?

我想要完成的是通过 ShaderMaterial 将颜色、镜面反射和法线贴图应用于模型,方法是指向具有模型材质名称但添加了“-color”、“-normal”和“-spec”字样的新文件:

“brochureFrontCover”->“brochureFrontCover-color.jpg”、“brochureFrontCover-normal.jpg”、“brochureFrontCover-spec.jpg”

如果有好心人能告诉我这样的功能应该是什么样子,我将不胜感激。

脚本: http ://dev.printhouse.co.uk/uv-simulator/j/Brochure.js

Collada 模型: http ://dev.printhouse.co.uk/uv-simulator/m/Brochure.dae

4

1 回答 1

1

我认为应该是这样的:

THREE.SceneUtils.traverseHierarchy( dae, function ( child ) {

    if ( child.material ) {

        var shader = THREE.ShaderUtils.lib[ "normal" ];
        var uniforms = THREE.UniformsUtils.clone( shader.uniforms );

        uniforms[ "tDiffuse" ].texture = THREE.ImageUtils.loadTexture( child.material.name + "-color.jpg" );
        uniforms[ "tNormal" ].texture = THREE.ImageUtils.loadTexture( child.material.name + "-normal.jpg" );
        uniforms[ "tSpecular" ].texture = THREE.ImageUtils.loadTexture( child.material.name + "-spec.jpg" );

        uniforms[ "enableDiffuse" ].value = true;
        uniforms[ "enableSpecular" ].value = true;

        child.geometry.computeTangents();

        child.material = new THREE.ShaderMaterial( {
            uniforms: uniforms,
            vertexShader: shader.vertexShader,
            fragmentShader: shader.fragmentShader,
            lights: true
        } );

    }

} );

如果您需要调整制服,这个例子应该是一个很好的参考。

于 2012-05-28T14:16:40.850 回答