坚持建立一个游戏引擎

时间:2009-10-11 15:06:04

标签: c++ opengl sdl

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

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

将渲染场景的场景渲染器

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

每个州都有一个演员集合,每个演员都有一组三角形。 场景渲染器成功设置了视图投影矩阵

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

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

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

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

三江源!

2 个答案:

答案 0 :(得分:2)

如果你编写一个相机类并使用它的功能在世界中移动/旋转它,你可以使用你从内部四元数得到的矩阵来变换顶点,给你相机空间中的位置,这样你就可以对三角形进行排序从后到前。

答案 1 :(得分:1)

'queueTriangle'调用听起来效率很低。现代引擎通常一次使用数千个三角形,因此您通常几乎不会在单个三角形的水平上处理任何事情。如果你要更改纹理以完成这个排序,那就更糟了。

我建议采用一种更简单的方法 - 通过对世界空间中的演员位置进行排序而不是单个三角形的位置来绘制不透明的多边形,并从前到后渲染演员,一次演员。您的透明/半透明多边形仍然需要从后到前的方法(假设您没有使用预乘alpha),但其他一切都应该更简单,更快。