在three.js中设置网格纹理

时间:2014-01-22 00:06:34

标签: three.js

我有一个网格,我加载为.dae(collada)。但是,我的纹理文件是独立的(作为PNG)

目前,我的加载代码是

loader.load("./assets/map_tutorial.dae", function(collada) {
    var terrain = collada.scene.children[0];
    var texture = new THREE.ImageUtils.loadTexture("./assets/map_tutorial_tex.png");
    terrain.rotation.x = Math.PI / 2;
    terrain.rotation.y = Math.PI;
    scene.add(terrain);
    console.log("There are " + collada.scene.children.length + " meshes!");
});

但是,我不确定如何将纹理应用到我的网格(地形)

提前致谢!

1 个答案:

答案 0 :(得分:1)

您必须从纹理中创建新的材质对象。假设你想要朗伯,就像这样:

var material = new THREE.MeshLambertMaterial( { map:texture } );

我不熟悉collada loader,但它似乎已经为你创建了一个网格。在这种情况下,我不确定您是否可以更改此网格的材质。绝对有效的方法是从您从.nge文件和从png图像创建的材料加载的几何体创建新网格。

var mesh = new THREE.Mesh( terrain.geometry, material );
scene.add( mesh );

我希望这会有所帮助,通常我会使用这种方法工作的three.js原生JSON模型文件。区别在于THREE.JSONLoader为您提供了两个用于您的用途:几何和材料。 Collada加载器似乎为您提供了已创建的网格,因此尽可能尝试更改它的几何体,或者从此网格中“窃取”几何体并创建一个新的网格,就像我在示例中所做的那样。