【发布时间】:2011-06-18 05:26:40
【问题描述】:
所以我在 Ogre3D 中创建了一个模型,这个模型由许多任意旋转和位置的三角形组成。我想像许多建模程序一样“展开”模型,以便所有三角形都映射到 2d (x,y) 但三角形大小保持不变。这是用于应用贴花。必须保持三角形大小的原因,以便在应用纹理时不会进行任何拉伸。
这是我正在考虑的方向,但我无法将其可视化并实现正确的算法:
//Verticies will have a converted bool;
func( triangle x):
for each of x's vertices:
map to x,y coordinates if not converted;
check other triangles for common vertex if so call func(common_tri);
一旦返回,就会有所有三角形的转换版本,以便它们全部展开并放置在纹理上,我遇到的问题是映射到 x,y 空间。我不确定如何将 3d 空间中的三角形转换为 2d 空间,以便保持其所有属性(例如从倾斜视图变为表面的垂直视图)任何帮助将不胜感激。
【问题讨论】:
-
如果没人能回答你,你可能想检查搅拌机的来源,uv 展开必须在 某处 那里。 svn.blender.org/svnroot/bf-blender/trunk/blender
-
嗯,我在 XSI 中查看了这些类型的操作,但它们都没有达到我想要做的事情他们会环绕,我希望它只是在材料上保持平坦。不过感谢您的建议。
-
我不确定您是否假设给定顶点映射到 xy 中的唯一点。给定一个拓扑为球体的模型,以这种方式肯定将其映射到平面是不可能的(例如考虑一个简单的立方体。)相关地,如果你想避免拉伸,即使是立方体的三个边在单个顶点不能都映射到平面上共有的顶点。因此,我认为您要么必须分别处理每个三角形,要么必须进行拉伸,在后一种情况下,至少某些顶点需要多个映射。
-
一般来说,您无法将 3D 表面映射到 2D 而不会有一些失真。例如,参见en.wikipedia.org/wiki/Map_projection。如果您愿意允许一些失真,那么有数以万计的映射/展开算法。
-
一个三角形是的,但是你想要一个有很多三角形的模型。你想保持空间关系完整吗(即:保持三角形与其邻居相连)?如果是这样,则没有从 3D 到 2D 的通用映射可以保留所有相关三角形的几何形状。
标签: c++ model 3d geometry uv-mapping