陷入构建游戏引擎的困境

Posted

技术标签:

【中文标题】陷入构建游戏引擎的困境【英文标题】:Stuck building a game engine 【发布时间】:2009-10-11 15:06:04 【问题描述】:

我正在尝试使用 c++、SDL 和 OpenGL 构建一个(简单的)游戏引擎,但我似乎无法弄清楚下一步。这就是我目前所拥有的......

控制主游戏循环的引擎对象

渲染场景的场景渲染器

可以推送和弹出的游戏状态堆栈

每个州都有一个参与者的集合,每个参与者都有一个三角形的集合。 场景渲染器成功设置视图投影矩阵

我不确定我遇到的问题是否与如何存储演员位置或如何创建渲染队列有关。

我已经读到创建一个渲染队列来从前到后绘制不透明多边形然后从后到前绘制透明多边形是很有效的。因此,我的演员调用场景渲染器对象的“queueTriangle”方法。然后场景渲染器对象存储一个指向每个角色三角形的指针,然后根据它们的位置对它们进行排序,然后渲染它们。

我面临的问题是,要做到这一点,三角形需要知道它在世界坐标中的位置,但如果我使用 glTranslatef 和 glRotatef 我不知道这些坐标!

请有人给我一个解决方案,或者将我链接到如何解决这个问题的(简单)指南。

谢谢!

【问题讨论】:

【参考方案1】:

如果您编写一个相机类并使用它的函数在世界中移动/旋转它,您可以使用从内部四元数获得的矩阵来转换顶点,从而为您提供相机空间中的位置,以便您可以对三角形进行排序从后到前。

【讨论】:

【参考方案2】:

在我看来,“queueTriangle”调用效率非常低。现代引擎通常一次处理数千个三角形,因此您通常几乎不会处理单个三角形级别的任何内容。而且,如果您要大量更改纹理来完成此排序,那就更糟了。

我推荐一种更简单的方法 - 通过排序世界空间中的演员位置而不是单个三角形的位置,以不那么严格的顺序绘制不透明多边形,并从前到后渲染演员,一次一个演员.您的透明/半透明多边形仍然需要从后到前的方法(前提是您没有使用预乘 alpha),但其他一切都应该更简单、更快。

【讨论】:

事实上,上述不透明的建议是显卡制造商推荐的,因为定期切换着色器/常量/纹理/等比未通过早期 Z 测试的多边形昂贵得多。 是的。减少过度绘制是好的,但不能以大量状态更改为代价。

以上是关于陷入构建游戏引擎的困境的主要内容,如果未能解决你的问题,请参考以下文章

在虚幻引擎5中构建你的首款游戏 - 01 - 介绍

在虚幻引擎5中构建你的首款游戏 - 01 - 介绍

在虚幻引擎5中构建你的首款游戏 - 06 - 游戏模式&相机&运动&按键

在虚幻引擎5中构建你的首款游戏 - 06 - 游戏模式&相机&运动&按键

在虚幻引擎5中构建你的首款游戏 - 05 - 岩石和植物

在虚幻引擎5中构建你的首款游戏 - 04 - 地形和草地