【发布时间】:2011-03-12 07:26:05
【问题描述】:
我正在为一款视频游戏使用随机分形以程序方式生成泥土。我已经使用中点置换算法生成了一个高度图并将其保存到纹理中。对于如何将其转化为法线纹理,我有一些想法,但我们将不胜感激。
我的高度纹理目前是 257 x 257 灰度图像(高度值为可见性目的而缩放):
我的想法是图像的每个像素代表 256 x 256 网格中的一个格坐标(因此,为什么有 257 x 257 高度)。这意味着坐标 (i, j) 处的法线由 (i, j)、(i, j + 1)、(i + 1, j) 和 (i + 1, j + 1) 处的高度确定)(分别称为 A、B、C 和 D)。
因此,鉴于 A、B、C 和 D 的 3D 坐标,是否有意义:
- 将四个分成两个三角形:ABC 和 BCD
- 通过叉积计算这两个面的法线
- 分成两个三角形:ACD 和 ABD
- 计算这两个面的法线
- 平均四个法线
...或者有没有我想念的更简单的方法?
【问题讨论】:
-
我会做类似的事情,只是我会使用 4 个点 (i, j+1), (i+1, j), (i, j-1) 和 (i-1, j) 计算法线,使 (i, j) 在它们的中心。无论如何,我认为你是在正确的方式:)
-
对于“更简单”的方法,您需要知道什么函数描述 x,y 处的高度......类似于 h = f(x,y),然后您可以从那里导出法线函数x,y... 除非你有这个功能,否则你的方法是你能做的最好的;)