我正在开发一款东方风格的子弹地狱射击游戏.屏幕将完全充满子弹(所以实例化是我想要的),但我希望这可以在较旧的硬件上工作,所以我现在正在做一些事情,没有颜色,纹理,直到我弄清楚这一点.
glVertexPointer(3, GL_FLOAT, 0, SQUARE_VERTICES);
for (int i = 0; i < info.centers.size(); i += 3) {
glPushMatrix();
glTranslatef(info.centers.get(i), info.centers.get(i + 1), info.centers.get(i + 2));
glScalef(info.sizes.get(i), info.sizes.get(i + 1), info.sizes.get(i + 2));
glDrawElements(GL_QUADS, 4, GL_UNSIGNED_SHORT, SQUARE_INDICES);
glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)
因为我希望这可以在旧硬件上工作,我试图避免着色器和诸如此类的东西.那里的设置让我失去了大约80个多边形.我希望从中得到至少几百个.info
是一个结构,它具有渲染的所有好处,除了一些向量之外没什么.
我对OpenGL很陌生,但我至少听过并尝试过所有可以完成的事情,但并不是说我对它很好.这个游戏是一个2D游戏,我从SDL切换到Opengl,因为它可以让一些更好的效果更容易.显然,SDL的工作方式不同,但我从未遇到过这个问题.
归结为此,我显然在这里做错了,那么如何才能正确实现旧硬件(OpenGL 1.x)的实例化呢?另外,给我任何提高性能的提示.
另外,给我任何提高性能的提示.
如果你要使用精灵 ....
的glTranslatef
对于基于 2D 精灵(这是重要的)游戏,您可以完全避免使用矩阵(可能除了相机/投影矩阵).我不认为矩阵会对2D游戏有很大帮助.
在2D游戏中,你的主要瓶颈将是GPU内存传输速度 - 将数据从纹理传输到屏幕.所以"使用少量绘制调用"和"将所有内容放入VA"对你没有帮助 - 你可以用一个精灵来杀死性能.
但是,如果您要使用不使用纹理的矢量图形(请参阅area2048(youtube)或rez),那么上面的大多数建议将不适用,并且此类游戏与3d游戏不会有很大差异.在这种情况下,使用顶点数组,顶点缓冲区对象或显示列表(取决于可用的内容)并利用矩阵函数是合理的 - 因为您的瓶颈将是顶点处理.您仍然需要最小化状态开关的数量.
归档时间: |
|
查看次数: |
1903 次 |
最近记录: |