我正在对它们之间的移动行星和引力进行基本模拟,并显示重力与一个指向重力方向的绿色矢量的大场,拉动它们和拉力的大小。
这意味着我有400 +行,它们实际上是一个旋转的矩形,每帧重绘一次,这就是我的帧率。 无论如何要优化这一点而不是减少线路?即使使用许多复杂的多边形/颜色,今天的2D OpenGL游戏如何实现如此高的帧速率?
编辑:
SFML对每一帧进行实际渲染,但我创建线条的方法是制作一个类似矩形的sf :: Shape。生成函数采用宽度,并将点1设置为(0,宽度),将点2设置为(0,-width),将点3设置为(LineLength,-width),将点4设置为(LineLength,width)。这形成了沿正x轴延伸的矩形。最后,我围绕(0,0)旋转矩形以使其朝向正确的方向,并将形状位置设置为该线的起点所在的位置。
答案 0 :(得分:3)
即使使用许多复杂的多边形/颜色,今天的2D OpenGL游戏如何实现如此高的帧速率?
我想通过不绘制400多个4个顶点对象,每个对象都旋转并用矩阵缩放。
如果你想绘制很多这些东西,你将不得不停止依赖SFML的绘图类。这引入了很多开销。你必须以正确的方式去做:通过画线。
如果您坚持每条线都有单独的宽度,那么您就不能使用GL_LINES。您必须改为计算“线”的四个位置并将它们粘贴在缓冲区对象中。然后,您使用单个GL_QUADS调用绘制它们。您需要使用适当的buffer object streaming techniques才能使此工作变得相当快。
答案 1 :(得分:1)
大批量和VBOs。还要仔细检查您在模拟更新代码中花费的时间。
快速检查:如果您的主渲染循环附近有glBegin()
,那么您可能正在做错了。
计算所有顶点位置,然后通过GL_STREAM_DRAW
将它们流式传输到GPU中。如果你能容忍一些延迟,可以使用两个VBO和双缓冲区。