【发布时间】:2009-07-15 10:07:35
【问题描述】:
我目前正在开发一款小型 iPhone 游戏,并且正在将我开始为 Mac 开发的 3d 引擎移植到 iPhone 上。这一切进展顺利,Mac 引擎的所有功能现在都出现在 iPhone 上。引擎还没有完成,但现在至少我有了基本的资源管理、一个场景图和一个可以轻松动画和移动对象的构造。
我现在拥有的截图:http://emle.nl/forumpics/site/planes_grid.png。这架小飞机是我几年前为当时正在制作的游戏制作的测试对象。它与我现在正在开发的游戏无关,但 3d 引擎及其设施当然是。
现在,我来到了材质的话题,关于哪些纹理、灯光等属于可渲染对象的描述。这意味着对每个对象都有大量的 OpenGL 客户端状态和 glEnable/glDisable 调用。你建议用什么方法来最小化这些状态变化? 目前我正在按材质排序,因为具有相同材质的对象根本不需要任何更改。我创建了一个名为 RenderState 的类,它缓存当前的 OpenGL 状态,并且仅在选择不同材质时应用不同的成员。这是一个可行的解决方案,还是会在引擎成熟并且需要缓存越来越多的状态时变得无法控制?
【问题讨论】: