2017-08-30 3 views
-1

J'ai écrit un pathtracer en C++, et maintenant je veux afficher le processus de rendu en temps réel, donc je me demande quelle est la meilleure façon de le faire.C++ - Affichage de la mise à jour en continu de l'image

Fondamentalement, l'image rendue se met à jour après chaque itération, donc j'ai juste besoin de la récupérer, de l'afficher dans une fenêtre séparée et de la mettre à jour.

Je pensais utiliser DirectX, et il me semble que je pourrais probablement le faire aussi avec OpenCV, mais je cherche juste un moyen simple qui ne nécessite pas l'ajout de beaucoup de nouveau code. J'utilise C++ sous Windows.

+0

Je l'ai fait quelque chose de similaire avec opengl et OpenCL. – zindarod

+0

S'agit-il d'un traceur de chemin 2D ou 3D? – Asesh

Répondre

1

Si je comprends bien, votre traceur de chemin produit probablement une couleur par rayon émis? Si tel est le cas, et que vous envisagez d'afficher l'image rendue dans une fenêtre séparée, je suggère d'utiliser SDL2. Il ya un grand ensemble de tutoriels concernant les graphiques en temps réel en utilisant C++ et SDL par Lazy Foo' Productions.

Extrait tiré officielle SDL documentation (sans cochonneries nécessaire pour initialiser les fenêtres) en ce qui concerne SDL_Surface, que vous utiliserez probablement:

/* This is meant to show how to edit a surface's pixels on the CPU, but 
    normally you should use SDL_FillRect() to wipe a surface's contents. */ 
void WipeSurface(SDL_Surface *surface) 
{ 
    /* This is fast for surfaces that don't require locking. */ 
    /* Once locked, surface->pixels is safe to access. */ 
    SDL_LockSurface(surface); 

    /* This assumes that color value zero is black. Use 
     SDL_MapRGBA() for more robust surface color mapping! */ 
    /* height times pitch is the size of the surface's whole buffer. */ 
    SDL_memset(surface->pixels, 0, surface->h * surface->pitch); 

    SDL_UnlockSurface(surface); 
}