2

Three.jsライブラリのColladaローダーを介してインポートされた単純な3Dモデルのすべてのテクスチャを置き換える方法はありますか?

私が達成したいのは、モデルのマテリアル名で「-color」、「-normal」、「-spec」の文言を追加した新しいファイルをポイントすることにより、ShaderMaterialを介してモデルにカラー、スペキュラー、法線マップを適用することです。

"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 に答える