three.js每个物体上的不同材料

时间:2014-04-29 04:54:30

标签: javascript three.js

我对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中来更改纹理贴图。 任何帮助表示赞赏。 对不起格式和解释不好。我是新手,并将其作为一种爱好。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您已经定义了两次函数addModelToScene,因此第二个定义将覆盖第一个和您正在调用的函数。因此,您还要为两者分配gals3blackMaterial的纹理。

相反,您可以定义单个函数addModelToScene并传递要用作参数的纹理名称。