2015-07-27 3 views
1

Я использую версию 71 библиотеки. Я пытаюсь отобразить изображение на каждой грани трехмерного объекта (сделанного через Blender). Является ли это с помощью разных изображений или повторяющихся изображений, не имеет значения. Объект загружается через функцию загрузки после создания экземпляра JSONLoader. Ниже приведен пример загрузки json-файла. В этом случае форма представляет собой куб, который имеет шесть сторон. Есть ли способ изменить следующий код, чтобы это произошло?Three.js - отображение изображений на объекте JSON

var loaderSix = new THREE.JSONLoader(); 
    loaderSix.load("./resources/json/six.json", function (model) { 
     var materialSix = new THREE.MeshNormalMaterial(); 

     six = new THREE.Mesh(model, materialSix); 
     six.translateY(1); 
     six.scale = new THREE.Vector3(3, 3, 3); 
     meshSix = THREE.SceneUtils.createMultiMaterialObject(six, materialSix); 
    }); 
+0

Кстати, не могли бы вы сделать свой вопрос более ясным? Вы загружаете объект или материалы? Непонятно, откуда взялись ваши изображения? Возможно, у вас уже есть куб, и вы загружаете материалы, потому что нетрудно сделать куб с «three.js»? –

+0

Я загружаю json-файл, но код не показывает мою попытку отображения изображений на объекте. Я попробовал несколько догадок, чтобы попытаться отобразить изображения, но это не сработает. Если бы я показал вам свой первоначальный код, это выглядело бы неясным и запутанным, я боюсь. Мои изображения поступают из папки в папке ресурсов/изображений, той же папке ресурсов, которая содержит папку «json». Я думаю, что загружаю его как материалы, а не объекты для своих изображений; в чем разница между загрузкой объектов или материалов? Есть ли предпочтительный способ загрузки изображений? – ACoder

ответ

1

1) При загрузке материалов, и уже имеют геометрию, то вы пробовали "MeshFaceMaterial" (docs)?

var loaderSix = new THREE.JSONLoader(); 
    loaderSix.load("./resources/json/six.json", function (model) { 
     var materialSix = new THREE.MeshFaceMaterial("your materials array: model"); 

     six = new THREE.Mesh("your cube geometry", materialSix); 
     six.translateY(1); 
     six.scale = new THREE.Vector3(3, 3, 3); 
    }); 

2) При загрузке объекта, а затем добавить различные изображения является «MeshFaceMaterial» вариант, а также, подобный пример here. Я изменил этот код в соответствии с положением:

var image;   
    var materials = []; 
    for (var i=0; i<6; i++) { 
    image = "./resources/images/"+fileName+".png" 
    materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture(image)})); 
    } 
    var loaderSix = new THREE.JSONLoader(); 
     loaderSix.load("./resources/json/six.json", function (model) { 
      var materialSix = new THREE.MeshFaceMaterial(materials); 

      six = new THREE.Mesh(model, materialSix); 
      six.translateY(1); 
      six.scale = new THREE.Vector3(3, 3, 3); 
     }); 
+0

Я пробовал этот метод, но в прошлом я неправильно его кодировал. Теперь я создаю свой массив материалов, чтобы попробовать его. Как бы вы объявили и определили массив? Я знаю, как создавать массивы, но я спрашиваю о загрузке изображения через библиотеку three.js. – ACoder

+0

Проверьте мой ответ со вторым вариантом! И проверьте, есть ли ваши изображения .png? –

+0

Это PNG-файлы. – ACoder

Смежные вопросы