纹理映射three.js中的不同对象

时间:2014-01-24 12:06:25

标签: three.js texture-mapping render-to-texture

我们正在研究产品设计师项目。设计师准备就绪。

我想用three.js做

的3D预览结果。

我们如何设计手机壳的一面?或者我们可以边界纹理映射吗?

OBJLoader版本: http://www.shopilife.com/baskiburada/viewer/viewer_4.html

有些obj文件无法纹理化。错误是“GL_INVALID_OPERATION:glDrawElements:尝试访问属性2中的范围顶点” http://www.shopilife.com/baskiburada/viewer/viewer2.html

1 个答案:

答案 0 :(得分:0)

首先,关于手机壳背面与正面的重新纹理。这里的方法是分离模型本身的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只有vf。希望有所帮助