用C ++重写一个简单的Pygame 2D绘图函数

时间:2010-06-16 05:05:29

标签: c++ drawing performance 2d pygame

我有一个2D矢量列表(比如20x20 / 400点),我在这样的屏幕上绘制这些点:

for row in grid:
    for point in row:
        pygame.draw.circle(window, white, (particle.x, particle.y), 2, 0)

pygame.display.flip() #redraw the screen   

这完美无缺,但它比我预期的要慢得多。

我想用C ++重写它,并希望在路上学习一些东西(我在C ++ atm上做一个单元,所以它会有所帮助)。最简单的方法是什么?我看过Direct X,到目前为止已经有了一些教程,并绘制了一些基本的三角形。但是我找不到一个简单的(绘制点)。

2 个答案:

答案 0 :(得分:1)

DirectX没有只绘制一个点的功能。它仅在顶点和索引缓冲区上运行。如果你想要更简单的方法来制作一个点,你需要写一个包装器 要绘制点列表,您需要使用DrawPrimitive(D3DPT_POINTLIST,...)。然而,没有简单的方法来绘制一个点。你必须准备缓冲区,锁定它,填充数据,然后绘制缓冲区。或者您可以使用动态顶点缓冲区 - 以优化性能。有一个DrawPrimitiveUP调用应该能够渲染存储在系统内存中的基元(而不是使用缓冲区),但据我所知,它不能用pure devices工作(可能会默默地丢弃基元),所以你必须使用软件顶点处理。

在OpenGL中,您有glVertex2f和glVertex3f。你的调用看起来像这样(可能有拼写错误或语法错误 - 我没有编译/运行它):

glBegin(GL_POINTS);
glColor3f(1.0, 1.0, 1.0);//white
for (int y = 0; y < height; y++)
    for (int x = 0; x < width; x++)
        glVertex2f(points[y][x].x, points[y][x].y);//plot point
glEnd();

OpenGL比DirectX更容易玩游戏和试验。我建议您查看SDL,并将其与OpenGL结合使用。或者您可以使用GLUT而不是SDL。

或者您可以尝试使用Qt 4.它有一个非常好的2D渲染例程。

答案 1 :(得分:1)

当我第一次涉足游戏/图形编程时,我变得喜欢Allegro。它具有广泛的功能和非常简单的学习曲线。

相关问题