gpt4 book ai didi

javascript - 如何在 Three.js 中用 ShaderMaterial 替换 Collada 导入的纹理?

转载 作者:行者123 更新时间:2023-11-30 05:57:42 27 4
gpt4 key购买 nike

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

我想要完成的是通过 ShaderMaterial 将颜色、高光和法线贴图应用于模型,方法是指向具有模型 Material 名称但添加了“-color”、“-normal”和“-spec”的新文件措辞:

"brochureFrontCover"-> "brochureFrontCover-color.jpg", "brochureFrontCover-normal.jpg", "brochureFrontCover-spec.jpg"

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

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

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

最佳答案

我觉得应该是这样的:

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

}

} );

This example如果您需要调整制服,应该是一个很好的引用。

关于javascript - 如何在 Three.js 中用 ShaderMaterial 替换 Collada 导入的纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com