我对three.js和javascript非常新。我正在寻找创建一个具有不同对象的场景,每个对象都有自己的材质,稍后我将编程通过GUI进行修改。 我遇到的问题是我的对象成功渲染但它们都保留了相同的材料,但并不是每个都有自己的材料。
这是我渲染对象和材料的代码:
var jsonLoader = new THREE.JSONLoader();
var gals3 = jsonLoader.load( "model/galmodel.js", addModelToScene );
var gals3black = jsonLoader.load( "model/galaxys3.js", addModelToScene );
}
function addModelToScene(gals3)
{
var gals3Material = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('images/galaxys3_white_diffuse.png') } );
gals3 = new THREE.Mesh(gals3, gals3Material );
gals3.scale.set(10,10,10);
scene.add( gals3 );
}
function addModelToScene(gals3black)
{
var gals3blackMaterial = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('images/galaxys3_black_diffuse.png') } );
gals3black = new THREE.Mesh(gals3black, gals3blackMaterial );
gals3black.scale.set(10,10,10);
scene.add( gals3black );
}
使用上面的代码我正确渲染对象,但它们都保留了“gals3black”材质。我希望代码能够轻松地在以后编程到GUI中来更改纹理贴图。 任何帮助表示赞赏。 对不起格式和解释不好。我是新手,并将其作为一种爱好。
提前感谢您的帮助。
答案 0 :(得分:0)
您已经定义了两次函数addModelToScene,因此第二个定义将覆盖第一个和您正在调用的函数。因此,您还要为两者分配gals3blackMaterial的纹理。
相反,您可以定义单个函数addModelToScene并传递要用作参数的纹理名称。