所以我在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空间中获得一个二维空间的三角形,以便保持其所有属性(如从角度视图到表面的纵向视图)。任何帮助都将非常感激。
答案 0 :(得分:0)
我认为顶点是矢量。
因此,您可以对每个向量进行标准化,然后删除Z坐标,然后再次应用乘法。 即tri = vec1,vec2,vec3, vec1Length = vec1.getLength() newVec1 = vec1.normalize()* vec1Length
因为这将保留矢量的大小,但将它们映射到2d平面。 (或者应该,我不是100%,这在数学上是正确的。)
另一种方法是将三角形本身视为二维平面,然后将矢量从局部空间转换为世界空间的二维平面。
例如,世界起源是(0,0,0)
三角形本身是由三个点定义的平面,您使用一个向量作为X坐标,找到垂直于该向量的向量,并且您已定义y坐标。你也可以定义Z×X交叉乘积Y,这将给你一个距离世界原点的“偏移”,你可以将它们映射到2d平面上,由来自世界原点的X,Y向量重新命名(即(1) ,0)和(0,1))。在很多基本的计算机图形书中应该有数学运算。