我目前正在掌握OpenGL。我从GLUT开始,但决定“毕业”到SFML库。 SFML实际上比GLUT提供更少的GL实用程序,但是可移植且提供了一些其他功能。所以这只是我,GL和GLU。是的,我是一个惩罚的骗子。管理OpenGL状态机的策略
我想请教一下,人有管理的东西,如矩阵的变化,颜色变化,材质的变化等
目前,我从一个单独的线程渲染下一个“裸对象”的设计理念策略。即。每个图形对象都有一个可以完成绘图工作的函数。这些对象本身可能是其他对象的集合,也可能是图形基元的集合。当一个特定的Render()
被调用时,它没有关于在它之前调用过什么变换/材料变化的信息(当然是好事)。
随着事态已经发展我有一定的策略,如使每一个功能的承诺,推动再弹出的矩阵,如果他们进行任何转换解决。对于其他设置,我在调用glBegin()
之前明确地设置了需要设置的任何内容,并且没有理所当然。当一个渲染函数对不太常见的状态变量进行一些更改时,问题就会出现,并且我开始考虑使用一些RAII来强制执行对作用域中所做的所有状态更改的逆转。使用OpenGL有时会提醒我很多汇编编程。我发现我实际上正在开发自己的openGL封装器,所以我认为很有必要了解其他人使用的策略,或者关于这些策略的想法和注意事项。学科。或者,也许是时候切换到像场景图库这样的东西了?
更新:13/5/11
现在已经调查过与顶点/正常/彩色阵列和VBO的我已决定将所有实际openGL的通信到一个单独的模块渲染。渲染过程将包括从我的对象中获取大量GL独立空间/材质数据,然后以可解释的格式将所有这些信息传递给openGL。这意味着所有原始数组处理和状态操作将被合并到一个区域中。它增加了一个额外的间接,和一点点计算开销的呈现过程,但它意味着我可以用一个单一的VBO /阵列为我所有的数据,然后每帧传送,一次就全部,一旦openGL的。
这是一个很好的问题,你也可能对http://gamedev.stackexchange.com/感兴趣。至于你的问题,它超越了我,但是让我想回到游戏编码。祝你好运 – 2011-05-12 04:11:08