如何使用OpenGL ES 1.1实现海洋表面效果?

3
我正在开发一款iPhone游戏,场景是在海面上。请问有没有人能推荐一些关于在OpenGL中实现波浪或涟漪的示例代码或教程?
目前iPhone只支持OpenGL ES 1.1,因此不支持着色器或其他高级效果。
我并不需要太过高级的东西,比如反射等。我也不想过度消耗设备性能。我只需要一个看起来像海洋的东西。(但如果能像《锦鲤池》那么好看就更好了。)
2个回答

3

iPhone在功能上就像1999年的GPU(例如NVIDIA Riva TNT 2)。因此,您最现实的选择只是混合几个滚动纹理。

例如,有一个带有“波形图案”的纹理。将它设置为两个纹理阶段,并以不同的方向/速度滚动它们(通过纹理矩阵)。然后设置纹理合成器将纹理相加以获得最终结果(或进行其他操作;这里有大量可能性)。


3

将形式相同的项相加:

a * sin(b * x + c * y + d * t)

每个这样的术语都会产生一组枯燥的直波,其方式如下:a是这些波贡献的振幅(高度),bc控制波的相对方向和频率(间距),d将波移动在该方向上随着t (模拟时间)的变化。
尝试几个这种形式的术语,保持t不变,以获得一个起伏的表面。然后你可以“调整”系数来获得你喜欢的粗糙程度。一旦你找到了几组你满意的系数,就让t变化来启动它。

你会把那个公式放到代码的哪里?它的结果是什么?是图像还是其他什么? - Thanks
对于固定的a、b、c和d,该公式给出了特定时间t和位置(x和y坐标)处的高度。一组这样的公式(每个公式的a、b、c和d值不同)给出了移动波分量的高度;将它们相加即可得到总高度。将高度转换为图像取决于透视。对于从正上方看的俯视图,只需将高度范围映射到蓝绿色范围内即可。基于透视的渲染需要矩阵运算(在此评论字段中过于复杂!;-) - joel.neely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接