наложение текстур на разные объекты в three.js

Мы учимся на дизайнерском проекте продукта. Конструктор готов.

Я хочу сделать результат предварительного просмотра 3D с помощью three.js.

Как мы можем текстурировать одну сторону корпуса телефона? или мы можем пограничное наложение текстуры?

Версия OBJLoader: http://www.shopilife.com/baskiburada/viewer/viewer_4.html< /а>

И некоторые файлы obj не могут быть текстурированы. Ошибка "GL_INVALID_OPERATION: glDrawElements: попытка доступа к вершинам вне диапазона в атрибуте 2" http://www.shopilife.com/baskiburada/viewer/viewer2.html


person sibelakyigit    schedule 24.01.2014    source источник
comment
Вашей геометрии нужны UV-развертки в faceVertexUvs[ 0 ], чтобы избежать ошибок.   -  person WestLangley    schedule 24.01.2014


Ответы (1)


Во-первых, что касается ретекстурирования задней и передней частей корпуса телефона. Подход здесь состоит в том, чтобы разделить UV-координаты на самой модели. Таким образом, у вас есть два набора материалов/текстур/UV. Затем во время выполнения вы загружаете их оба, используя MeshFaceMaterial для загрузки двух материалов в массив следующим образом:

materialArray.push(THREE.BasicMeshMaterial({color: 0xff0000})); //use whatever Material type you'd like of course
materialArray.push(THREE.BasicMeshMaterial({color: 0x0000ff}));
var multipleMaterial = new THREE.MeshFaceMaterial(materialArray);
phoneCaseMesh= new THREE.Mesh( geometry, multipleMaterial );

Затем, когда вы хотите переключить один из них, вы должны взять сетку и изменить сопоставление на нужную сторону примерно так:

phoneCaseMesh.material.materials[1].map = THREE.ImageUtils.loadTexture( 'newtexture.jpg' );

Во-вторых, что касается ошибки во втором образце, WestLangley прав, файл OBJ не имеет UV-координат для сопоставления, поэтому индекс выходит за пределы, когда вы применяете текстуру. Если вы посмотрите на оба файла OBJ, ваш iphone4.obj имеет vt объектов, а untitled.obj — это только v и f. надеюсь, это поможет

person Darryl_Lehmann    schedule 24.01.2014