2013-01-25 78 views
0

我有几个带有关联的mipmap纹理文件的OBJ文件。我将mipmap作为纹理加载并将其映射到加载每个OBJ文件后产生的3D对象。 3D对象一起渲染时会形成更大的3D对象的各个部分。使用Three.js将纹理(x,y)映射到3D对象(x,y)

而不是使用mipmap,我想使用2D图像作为纹理并将其“放”在3D对象的顶部,以便3D对象中每个(x,y)的颜色对应于颜色在纹理的(x,y)位置(z不重要 - 拉伸/扭曲的纹理可以)。

基本上,我不是将纹理映射到对象中的(x,y,z)顶点,而是将它映射到具有相同(x,y)的任何顶点。有没有办法与Three.js做到这一点,而无需阅读画布中的图像数据?

回答

0

当然,你只需要改变你的网LIK所以每个顶点的乌布苏:

uv.x = C * (vertex.x + A) 
uv.y = C * (vertex.y + A) 

然后纹理分配给你的网,你应该得到你想要的。

如上所述,您必须适当地应用比例/平移因子,以便UV最终在[0,1]的范围内。

+0

非常感谢!完美的作品! –

+0

对不起,快速跟进:我的网格坐标不是(0,1)x(0,1),所以我在创建时对它们进行了规范化(通过在所有顶点上调用.normalize())。现在,不是我的3d对象,所有的网格顶点都折叠成半球形。关于为什么会发生这种情况的想法?有没有办法将非标准化的坐标传递给faceVertexUvs? –

+0

不要更改网格顶点坐标。相反,如上所述应用仿射变换。我编辑了这篇文章。 – WestLangley

相关问题