Javascript 如何在Three.js中将Collada导入的纹理替换为ShaderMaterial纹理?
有没有办法替换通过Collada loader在Three.js库中导入的简单3D模型中的所有纹理 我想完成的是通过ShaderMaterial将颜色、镜面反射和法线贴图应用于模型,方法是指向具有模型材质名称但添加了“-color”、“normal”和“-spec”措辞的新文件: “BrochureFronCover”->“BrochureFronCover颜色.jpg”、“BrochureFronCover普通.jpg”、“BrochureFronCover-spec.jpg” 如果有一个好的灵魂能告诉我这样的功能应该是什么样子,我将非常感激 剧本: Collada型号:Javascript 如何在Three.js中将Collada导入的纹理替换为ShaderMaterial纹理?,javascript,webgl,three.js,collada,Javascript,Webgl,Three.js,Collada,有没有办法替换通过Collada loader在Three.js库中导入的简单3D模型中的所有纹理 我想完成的是通过ShaderMaterial将颜色、镜面反射和法线贴图应用于模型,方法是指向具有模型材质名称但添加了“-color”、“normal”和“-spec”措辞的新文件: “BrochureFronCover”->“BrochureFronCover颜色.jpg”、“BrochureFronCover普通.jpg”、“BrochureFronCover-spec.jpg” 如果有一个好的
我认为应该是这样的:
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
} );
}
} );
如果你需要调整制服,这应该是一个很好的参考。谢谢mrdoob!我已经更新了脚本,正在获取
GL\u无效\u操作:glDrawXXX:尝试访问超出范围的顶点
错误。dae
参数是否应该调用模型层次结构中的任何特定级别(我将其设置为dae=collada.scene;
)?噢,嗯!首先,执行child.material=new THREE.MeshBasicMaterial({wireframe:true})代码>看看是否至少可以…是的,这显示了一个很好的线框模型。那么,你认为呢?如果这是库中的一个bug,或者有其他方法,有人能告诉我吗?非常感谢!因此,拥有child.material=new THREE.MeshBasicMaterial({wireframe:true})代码>工作。。。什么时候开始出现问题?