2010-06-16 4 views
1

J'ai une liste 2D de vecteurs (par exemple 20x20/400 points) et je dessine ces points sur un écran comme ceci:Réécrire une fonction simple dessin Pygame 2D en C++

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 

Cela fonctionne parfaitement, mais c'est beaucoup plus lent que prévu. Je veux réécrire cela en C++ et j'espère apprendre quelques trucs (je fais une unité sur C++ atm, donc ça va aider) sur le chemin. Quelle est la meilleure façon d'aborder cela? J'ai regardé Direct X, et j'ai suivi jusqu'à présent un tas de tutoriels et j'ai dessiné quelques triangles rudimentaires. Cependant, je ne peux pas trouver un point de départ simple.

Répondre

1

DirectX ne dispose pas de fonctions pour dessiner un seul point. Il fonctionne uniquement sur les tampons de vertex et d'index. Si vous voulez une façon plus simple de faire un seul point, vous devrez écrire un wrapper.
Pour dessiner des listes de points, vous devez utiliser DrawPrimitive (D3DPT_POINTLIST, ...). Cependant, il n'y aura pas de moyen facile de tracer un point. Vous devrez préparer le tampon, le verrouiller, remplir avec les données, puis dessiner le tampon. Ou vous pouvez utiliser des buffers de vertex dynamiques - pour optimiser les performances. Il y a un appel DrawPrimitiveUP qui est supposé être capable de rendre les primitives stockées dans la mémoire système (au lieu d'utiliser des tampons), mais pour autant que je sache, cela ne fonctionne pas (peut annuler les primitives silencieusement) avec pure devices. avoir à utiliser le traitement de vertex logiciel.

En OpenGL, vous avez glVertex2f et glVertex3f. Votre appel ressemblerait à ceci (il pourrait y avoir une erreur de syntaxe ou erreur typographique - Je ne l'ai pas compilateur/exécuter):

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 est beaucoup plus facile pour jouer autour et à l'expérimentation de DirectX. Je recommande de jeter un oeil à SDL, et l'utiliser en conjonction avec OpenGL. Ou vous pouvez utiliser GLUT au lieu de SDL.

Ou vous pourriez essayer d'utiliser Qt 4. Il a une très bonne routines de rendu 2D.

1

Quand j'ai commencé à jouer avec la programmation de jeux/graphiques, je suis devenu fan de Allegro. Il a un large éventail de fonctionnalités et une courbe d'apprentissage assez facile.