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

Calculate Texture coordinates for procedural generated geometry

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

图像中显示的角度(89.90 度)可能会有所不同,因此几何形状会发生变化,并不总是如此统一。(可能像图像底部的几何形状)并且红点是根据角度在程序上生成的给定的平滑度。

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

为了简单和方便起见,我们假设:

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

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

  • x 的正值跨度向右,y 向上。并假设 x 几何轴与 u 纹理轴对齐,无论 angle(这是你的数字是 89.90)。

像这样:

然后从纹理[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) 范围内的任何 angle

(希望我没有犯太多尴尬的错误)

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

如果您确实需要 uv,一种选择是从具有映射的基元开始,并在每次操作时都使用它。

事后创建uv效果不会很好