2016-10-01 7 views
2

Я хотел бы добавить различные текстуры к каждому лицу коробки, но я не уверен, что loader.load это способ сделать это, прямо сейчас у меня есть:Есть ли способ добавить различные текстуры к объекту с TextureLoader.load

loader.load('img/brick.jpg', function (texture){ 
    var boxGeometry = new THREE.BoxGeometry(3, 3, 3); 
    var boxMaterial = new THREE.MeshLambertMaterial({ 
     map: texture, 
     overdraw: 10 
    }); 

    var box = new THREE.Mesh(boxGeometry, boxMaterial); 
    box.castShadow = true; 

    scene.add(box); 
} 

Возможно ли добавить другие изображения в loader.load или использовать другой метод?

ответ

0

Вы можете просто загрузить изображение с loader.load, и сохранить его в переменной:

var loader = new THREE.TextureLoader(); 

var brick = loader.load('img/brick.jpg'); 
var occlusion = loader.load('img/ao.jpg'); //Example texture 
//More textures here 

Вы можете применить его так:

var boxGeometry = new THREE.BoxGeometry(3, 3, 3); 
var boxMaterial = new THREE.MeshLambertMaterial({ 
    map: brick, 
    aoMap: occlusion, //An example use 
    overdraw: 10 
}); 
var box = new THREE.Mesh(boxGeometry, boxMaterial); 
box.castShadow = true; 

scene.add(box); 

Вместо загрузки текстур и используя анонимный обратный вызов, просто загрузите текстуру, сохраните ее в переменной, а затем примените там, где это необходимо.

+0

Это действительно работает! Но теперь я не уверен, как на самом деле заставить лица выглядеть по-другому? Так как он показывает только одну текстуру на всех стенах за раз. – acurate

+0

@acurate Проблема в том, что вы используете 'MeshLambertMaterial', который позволяет только предоставить карту для всей сетки, где карта скопирована на все грани. – Li357

+0

@acurate Если вы хотите получить карты лицом к лицу, см. [This] (http://stackoverflow.com/questions/17418118/three-js-cube-with-different-texture-on-each-face) после. – Li357