OpenGL,一次绘制多少钱?

时间:2011-08-31 15:50:35

标签: opengl-es

我真的很讨厌问一个完全愚蠢的问题,但是我缺乏正式的训练导致我把这个问题抛到脑后。

我已经到了当前游戏项目的重点,主要游戏区域/水平正在逼近,并且有一些我不确定的事情,基本上是关注实际看到多少以及投掷多少进入绘图命令。

这可能不是将要做的,但为了以更简单的方式解释它,我将提出这些例子。我目前正在使用OpenGL ES 1.1。

说我有一个角色,视图是第三人,靠近角色。我有一个大房间,有房间等等。我:

  1. 将整个关卡投入到绘图命令中,并假设裁剪和深度缓冲区可以修剪掉未显示/渲染到屏幕的内容吗?

  2. 打破区域,只绘制可能可能的部分?

  3. 还有其他更有效的方法吗?

3 个答案:

答案 0 :(得分:3)

如果您正在制作受限制的环境,例如FPS游戏中常见的环境,那么请研究Portal Occlusion。

这是一个热门话题,3D Math Primer for Graphics and Game DevelopmentReal-Time Rendering等书籍对该技术有很好的概述。其他文本可以提供有关该主题的更详细/更全面的阅读。

BSP树在这种类型的设置中也很有用。

如果您正在制作一个类似于RPG中的开放,大型世界,那么请考虑使用Quad / Oct-trees。

答案 1 :(得分:2)

理想情况下,您只想向GPU发送可见顶点。其他人,你会失去表现。另一方面,尝试进行完美的剔除可能需要太多的CPU周期。你必须打破一些补丁中的区域,并尝试只画出可以看到的东西。如果可能的话,尽可能准确,但不要在CPU上花太多时间。

始终剖析并检查:)

答案 2 :(得分:1)

这取决于您的驱动程序如何优化渲染。您将不得不尝试并测量性能。

如果表现不够好,可以参考以下提示:

  • 将整个游戏切割成不可能看到对方的区域(如果你的地面以下有区域,则无法看到表面,所以你可以将其切掉)。您只需要在两个区域同步保持过渡区域(向下延伸到地下区域)。

  • 大多数司机都善于使用octrees忽略玩家背后的部分。如果这对您不起作用,请创建自己的八叉树以优化传递给渲染器的模型。

  • 几何图形通常没有问题,纹理化需要时间(大量内存读取)。许多驱动程序允许使用具有不同分辨率(mipmapping)的纹理来加速该过程。