2011-01-22 5 views
2

Je suis actuellement en train d'implémenter mon propre moteur de rendu en utilisant l'algorithme Z-Buffer. Une fois que j'ai fait les calculs nécessaires (lire: My Z-Buffer est rempli avec les valeurs correctes), j'utilise SDL pour colorer les pixels nécessaires. J'utilise une HWSurface pour cela. Ma question est, comment est-ce que je peux rendre ceci aussi vite que possible? Avec ceci je veux dire le dessin lui-même, je peux faire des optimisations dans ma structure, mon algorithme, je le ferai plus tard, mais je veux être sûr que le dessin lui-même est le plus rapide possible. Parce que j'ai ma propre implémentation d'un ZBuffer (et il y aura d'autres algorithmes plus tard) je ne peux pas utiliser OpenGL, alors existe-t-il des alternatives?Mise en œuvre efficace d'un Z-Buffer

Maintenant, je vais juste sur tous mes points dans le z-buffer et je dessine tous les pixels qui doivent être dessinés, un par un (et parce que c'est z-buffer, je dois le faire, non?) et j'appelle une méthode DrawPixel. En ce qui concerne SDL je verrouille ma surface avant de passer sur le z-buffer, dessine tous les pixels et le débloque ensuite, cela ne peut pas aller plus vite autant que je sache.

Des suggestions?

+0

Pouvez-vous "dessiner" ceci en mettant à jour une texture, puis utiliser opengl pour dessiner un quad avec la texture? – vmpstr

+0

Je vais vérifier ça, pas encore sûr. – KWyckmans

Répondre

1

Les mises en œuvre logicielles sont incroyablement lentes, c'est-à-dire que WARP rend Crysis sur un hexacore i7 à un dixième de celui d'un 8800GT. Vous ne trouverez aucune performance compétitive dans un tampon Z implémenté par logiciel.

Un tampon Z n'est pas un algorithme particulièrement complexe et il est peu probable que vous trouviez une implémentation plus efficace qu'une autre. La mise en mémoire tampon Z n'est pas quelque chose que vous faites pendant la pixellisation - c'est quelque chose que vous faites pendant le rendu des pixels. Si la profondeur du nouveau pixel est plus éloignée que la valeur écrite, ne restituez pas le pixel, par exemple, ne calculez pas sa couleur, etc. Vous ne dessinez pas le z-buffer ou quelque chose comme ça. Ce n'est pas comme un genre où vous pourriez choisir le type le plus efficace pour votre algorithme - c'est plutôt comme une multiplication matricielle, ils sont à peu près tous les mêmes.

+0

La pixellisation * est * "rendu des pixels", et c'est là que vous effectuez généralement des tests de profondeur. –

+0

Oui, vous avez complètement raison, je vais devoir accepter que ça ne va pas aller plus vite. – KWyckmans