计算程序生成的几何体的纹理坐标

时间:2016-06-14 10:58:27

标签: c++ opengl game-engine

如何计算此类几何体的纹理坐标?

图像中显示的角度(89.90度)可能会有所不同,因此几何图形会发生变化并且并不总是如此均匀(可能像图像底部的几何图形),并且程序生成的红点取决于平滑度给出。

enter image description here

2 个答案:

答案 0 :(得分:0)

我会用基本的三角函数来解决它。

为简单起见,我们假设:

  • 坐标 [0,0] 位于几何体的中间(所有相交的线)和纹理的中间(它们相互映射 - <几何中的strong> [0,0] 在纹理中 [0,0]

  • 纹理坐标从 -1 跨越到 1 (并且假设在 90 的情况下几何坐标也是如此度 - 在其他情况下,它可能变得更宽更短)

  • x 的正确值范围向右, y 向上。并假设 x 几何轴与 u 纹理轴对齐,无论角度(图中为89.90)。

这样的事情: enter image description here

然后从纹理 [u,v] 转换为几何 [x,y] 坐标:

x = u + v*cos(angle)
y = v*sin(angle)

为了说明,它基本上是剪切变换和尺度变换以保持 y 的长度(或者 - 类似于旋转变换,但只旋转一个轴 - y - 不是都)。如果我反转那个转换(以获得我们想要的纹理坐标):

u = x - y*cotg(angle)
v = y/sin(angle)

使用这些方程,我应该能够将所描述情境中的任何几何坐标(一个点)转换为纹理坐标。对于(0,180)范围内的任何角度

(希望我没有在那里制造太多令人尴尬的错误)

答案 1 :(得分:0)

我会采取简单的方法,使用固体纹理或三平面[http://gamedevelopment.tutsplus.com/articles/use-tri-planar-texture-mapping-for-better-terrain--gamedev-13821]映射。

如果你真的需要uv,一个选择是从具有映射的原语开始,并为每个操作传递它。

事后创建uv不会得到好结果。

相关问题