IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

petit probleme avec le Raytracer de Matthieu Brucher


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 61
    Points
    61
    Par défaut petit probleme avec le Raytracer de Matthieu Brucher
    Voila je suis entrain de parcourir le petit tutoriel .un raytracer interactif". Et je suis bloqué à un certain niveau. Concretement, ce que je ne comprend pas du tout c'est ce bout de code çi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    	void RayTracer::draw(float *screen) const
    	{
    		Ray ray(origine, direction);
     
    		for(unsigned long j=0; j< hauteurPixel; ++j)
    		{
    			for(unsigned long i=0; i< largeurPixel; ++i)
    			{
    				generateRay(i,j,ray);
    				Couleur couleur(0.);
     
    				computeCouleur(ray, couleur);
     
    				for(unsigned int k=0; k < nbCouleurs; ++k)
    				{
    					screen[nbCouleurs * (j* largeurPixel +i) + k] = couleur(k);
    				}
    			}
    		}
    	}
    Et plus précisément la 3éme boucle for. screen est déclaré comme un float au départ, mais la je ne sais pas du tout ce qu'il lui fait le pauvre

    Merci d'avance pour vos éclaircissement.

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Non, screen est un float*. Ca veut dire que ça peut être un tableau de floats, comme c'est le cas ici.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je n'ai pas lu le tuto, mais à la lecture du code, je pense que :
    screen est un tableau de hauteurPixel lignes, chaque ligne ayant largeurPixel colonnes et chaque colonne ayant nbCouleurs canaux de couleurs.
    Cela doit ressembler à quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float screen[hauteurPixel*largeurPixel*nbCouleurs];
    Les trois boucles for itèrent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(unsigned long j=0; j< hauteurPixel; ++j)
    { // pour chaque ligne
       for(unsigned long i=0; i< largeurPixel; ++i)
       { // pour chaque colonne
          for(unsigned int k=0; k < nbCouleurs; ++k)
          {// pour chaque canal de couleur
    Le premier canal [k=0] de la première colonne [i=0] de la première ligne [j=0] est screen[0]
    Le second canal [k=1] de la première colonne [i=0] de la première ligne [j=0] est screen[1]
    ...
    Le dernier canal [k=nbCouleurs-1] de la première colonne [i=0] de la première ligne [j=0] est screen[nbCouleurs-1]

    Le premier canal [k=0] de la seconde colonne [i=1] de la première ligne [j=0] est screen[nbCouleurs + 0]
    Le second canal [k=1] de la seconde colonne [i=1] de la première ligne [j=0] est screen[nbCouleurs + 1]
    ...
    Le dernier canal [k=nbCouleurs-1] de la seconde colonne [i=1] de la première ligne [j=0] est screen[nbCouleurs + nbCouleurs-1]

    Pour synthétiser, quand on a parcouru i colonnes en entier, on a parcouru i*nbCouleurs entrées de screen.
    De la même façon, quand on a parcouru j lignes en entier, on a parcouru (en remplaçant i par largeurPixel) : largeurPixel * nbCouleurs entrées de screen.
    Donc à un moment (j,i,k) donnée, on a parcouru :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j * (largeurPixel* nbCouleurs ) + i * nbCouleurs  + k
    Ce qu'il factorise en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbCouleurs * (j*largeurPixel + i)  + k

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 61
    Points
    61
    Par défaut
    donc si je comprend bien:

    est un pointeur vers le premier élément de mon tableau. donc première colonne, et premier canal.

    Et pour la tableau, il est fait d'un dimension, donc une seul ligne, mais ou chaque colonne est divisée en 3 autres colonnes. c'est bien ça??

Discussions similaires

  1. [C#] Petit problème avec un élément du FAQ
    Par matech dans le forum ASP.NET
    Réponses: 11
    Dernier message: 24/01/2008, 14h11
  2. Petit problème avec grep
    Par dug dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 11/05/2005, 15h34
  3. petit probleme avec Devil
    Par ellipse dans le forum DevIL
    Réponses: 2
    Dernier message: 01/02/2005, 18h41
  4. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  5. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo