Во-первых, что касается ретекстурирования задней и передней частей корпуса телефона. Подход здесь состоит в том, чтобы разделить 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