2012-05-26 1 views
0

Je voudrais faire un traceur de base CPU en temps réel en C++ (principalement pour l'apprentissage propose). This tutorial était génial pour faire un traceur de base. Mais quelle serait la meilleure solution pour dessiner cela à l'écran en temps réel? Je ne demande pas comment optimiser la partie ray-tracing, juste la partie de la peinture pour qu'elle soit peinte sur l'écran et non dans un fichier.Raytracer en temps réel

Je développe sur/pour Windows.

Répondre

2

Vous pouvez vérifier this Code Project article sur le mécanisme de peinture de base en utilisant Win32API

Mise à jour: OP veut dessin rapide, que le Win32API ne fournit pas. Le PO a besoin de cela pour pouvoir mesurer l'accélération de l'algorithme de lancer de rayons pendant le processus d'optimisation. D'autres possibilités de dessin sont: DirectX, XNA, Allegro, OpenGL.

+0

L'api win32 avec paintpixel et un double tampon est-il vraiment la meilleure solution? – Knarf

+0

-1 entièrement inadéquat, vitesse-sage. –

+0

Alors, en pensant à la vitesse, quelle est la meilleure solution? – Knarf

0

Je travaille professionnellement sur un processeur raytracer en temps réel, et d'après ce que j'ai vu avec 2 ans de travail, la partie GPU pour afficher l'image ne sera pas le goulot d'étranglement, le goulot d'étranglement si vous l'atteignez sera la vitesse de votre RAM, je ne pense pas que la technologie de dessin fera une différence significative. A titre d'exemple, nous utilisons le clustering (un processeur ne suffit pas: p), nous pouvions rendre 100-200fps à 1920x1080 en regardant le ciel mais le goulot d'étranglement n'était pas la partie affichée, c'était le réseau. .. EDIT: Nous utilisons OpenGL pour l'affichage. Lorsque vous faites un processeur raytracer CPU, vous n'allez pas faire printPixelToGPU() mais vous allez écrire dans votre RAM et l'envoyer au GPU une fois l'image terminée. Faire printPixelToGPU() causerait probablement de gros frais généraux et c'est (à mon avis) un très mauvais choix de conception.

Cela ressemble à une optimisation prématurée. Mais si cela vous préoccupe encore, faites juste un bench du nombre de textures RAM que vous pouvez transférer avec GPU avec OpenGL, directX ..., et imprimez le framerate moyen. Vous verrez probablement que le framerate sera vraiment très élevé, donc vous n'atteindrez certainement jamais ce "goulot d'étranglement" à moins que vous n'utilisiez SDRAM ou un très mauvais GPU.