Javascript 在obj文件上放置纹理
我想在我的obj文件上添加纹理,但收到一条错误消息。 这是我的代码:Javascript 在obj文件上放置纹理,javascript,three.js,.obj,Javascript,Three.js,.obj,我想在我的obj文件上添加纹理,但收到一条错误消息。 这是我的代码: new THREE.MTLLoader() .setPath( 'models/cool' ) .load( 'CobbleStones.mtl', function ( mat ) { mat.preload(); var loader = new THREE.OBJLoader( loading
new THREE.MTLLoader()
.setPath( 'models/cool' )
.load( 'CobbleStones.mtl', function ( mat ) {
mat.preload();
var loader = new THREE.OBJLoader( loadingManager );
loader.load( 'models/cool.obj', function ( object ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material = gemBackMaterial;
child.material = material;
loader.setMaterials(mat);
var second = child.clone();
second.material = gemFrontMaterial;
var parent = new THREE.Group();
parent.add( second );
parent.add( child );
scene.add( parent );
objects.push( parent );
}
} );
} );
});
错误消息是:
GET http://localhost/alpha/Alpha/models/coolCobbleStones.mtl 404 (Not Found)
如果有人能帮我解决这个问题,我将非常感激。你走错了路。您正在将其设置为:
models/coolCobbleStones.mtl
但是你需要
models/cool/CobbleStones.mtl
只需在
.setPath('models/cool/')中添加一个/
,
您好,谢谢,我尝试了另一个mtl文件,您的解决方案有效,但我的obj文件上仍然没有纹理,您知道为什么吗?很难用您的代码示例来说明。感觉像是gemBackMaterial
、material
和gemfrontmatterial
不知从何而来。我不知道它们是在哪里声明的,传递到最外层函数的参数mat
没有分配给任何网格。您好,我正在开发类似配置程序的东西,我需要gemBackMaterial和gemFrontMaterial在运行时更改obj文件的颜色。没有分配垫子吗?我认为loader.setMaterials(mat)就足够了,这就是我在其他示例中看到的,你知道我可以在那里改进什么吗?@Boby是的,看起来你多次调用loader.setMaterials()
,因为它是在object.traverse()
循环中触发的。我真的不知道还能告诉你什么,因为这一切都取决于代码运行的上下文、加载的资产等。我的最佳建议是尽可能地遵循示例:一旦加载程序正常工作,然后开始修改它以满足您的特定需要。请阅读gemfrontmattribute
和gemBackMaterial
未声明(可能返回未定义)授权,尽管gemBackMaterial
已分配,然后在下一行中被覆盖,因此它可能没有那么重要。