【发布时间】:2008-10-07 10:55:58
【问题描述】:
我正在开发一款发生在海面上的 iPhone 游戏。有人可以推荐一些在 OpenGL 中实现波浪或波纹的示例代码或教程吗?
在我写这篇文章的时候,iPhone 只支持 OpenGL ES 1.1,所以不支持着色器或其他花哨的效果。
我不需要太花哨的东西。例如,我不需要反射。我不想让设备负担过重。我只需要一些看起来像海洋的东西。 (不过要是和锦鲤池一样好看就好了。)
【问题讨论】:
我正在开发一款发生在海面上的 iPhone 游戏。有人可以推荐一些在 OpenGL 中实现波浪或波纹的示例代码或教程吗?
在我写这篇文章的时候,iPhone 只支持 OpenGL ES 1.1,所以不支持着色器或其他花哨的效果。
我不需要太花哨的东西。例如,我不需要反射。我不想让设备负担过重。我只需要一些看起来像海洋的东西。 (不过要是和锦鲤池一样好看就好了。)
【问题讨论】:
iPhone 在功能上非常类似于 1999 年的 GPU(例如 NVIDIA Riva TNT 2)。所以你最现实的选择只是混合几个滚动纹理。
例如有一种带有“波浪图案”的纹理。将其设置为两个纹理阶段,并以不同的方向/速度滚动(通过纹理矩阵)。设置纹理组合器以将纹理添加在一起以获得最终结果(或执行一些其他操作;这里有很多可能性)。
【讨论】:
将形式的术语加在一起:
a * sin(b * x + c * y + d * t)
每个这样的术语都会以这种方式产生一组无聊的直波:a 是这些波贡献的幅度(高度),b 和 c 控制波的相对方向和频率(间距),随着t(模拟时间)的变化,d 沿该方向移动波浪。
用这种形式的几个术语进行实验,保持t 不变,得到一个起伏的表面。然后,您可以“调整”系数以获得您喜欢的粗糙度。一旦您找到了几组您满意的系数,就让t 变化以使其发挥作用。
【讨论】: