【问题标题】:How to Implement Ocean Surface Effect Using OpenGL ES 1.1? [closed]如何使用 OpenGL ES 1.1 实现海洋表面效果? [关闭]
【发布时间】:2008-10-07 10:55:58
【问题描述】:

我正在开发一款发生在海面上的 iPhone 游戏。有人可以推荐一些在 OpenGL 中实现波浪或波纹的示例代码或教程吗?

在我写这篇文章的时候,iPhone 只支持 OpenGL ES 1.1,所以不支持着色器或其他花哨的效果。

我不需要太花哨的东西。例如,我不需要反射。我不想让设备负担过重。我只需要一些看起来像海洋的东西。 (不过要是和锦鲤池一样好看就好了。)

【问题讨论】:

    标签: iphone opengl-es


    【解决方案1】:

    iPhone 在功能上非常类似于 1999 年的 GPU(例如 NVIDIA Riva TNT 2)。所以你最现实的选择只是混合几个滚动纹理。

    例如有一种带有“波浪图案”的纹理。将其设置为两个纹理阶段,并以不同的方向/速度滚动(通过纹理矩阵)。设置纹理组合器以将纹理添加在一起以获得最终结果(或执行一些其他操作;这里有很多可能性)。

    【讨论】:

      【解决方案2】:

      将形式的术语加在一起:

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

      每个这样的术语都会以这种方式产生一组无聊的直波:a 是这些波贡献的幅度(高度),bc 控制波的相对方向和频率(间距),随着t(模拟时间)的变化,d 沿该方向移动波浪。

      用这种形式的几个术语进行实验,保持t 不变,得到一个起伏的表面。然后,您可以“调整”系数以获得您喜欢的粗糙度。一旦您找到了几组您满意的系数,就让t 变化以使其发挥作用。

      【讨论】:

      • 你会在哪里把这个公式放到代码中?结果是什么?图片还是什么?
      • 对于固定的 a、b、c 和 d,该公式给出了特定时间 t 和地点的高度(x 和 y 坐标)。一组这样的公式(每个公式具有不同的 a、b、c 和 d 值)给出了移动波分量的高度;添加它们会给出总高度。将高度转换为图像取决于透视。对于从头顶垂直向下的视图,只需将高度范围映射到一系列蓝绿色。基于透视的渲染需要矩阵运算(对于这个评论字段来说太复杂了!;-)
      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2011-09-13
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多