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

Développement 2D, 3D et Jeux Discussion :

Probleme de diffuse shader dans un ray tracer


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Par défaut Probleme de diffuse shader dans un ray tracer
    Bonjour.

    Je suis en train de coder un raytracer et j'ai un problème avec la lumière diffuse.
    Voici deux images qui explique bien le soucis:
    http://www.florentdeville.123.fr/pro...stOneLight.tif

    http://www.florentdeville.123.fr/pro...tTwoLights.tif

    Dans ces exemples seul la lumière diffuse et ambiente est utilisée pour que ce soit plus simple. Avec une seule lumière : pas de probleme. Avec deux lumières, il y a des cercles noir qui apparaissent.

    Comment enlever ces cercles?

    Merci d'avance.

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    on peut pas trop deviner ce qui cloche vu qu'on sait rien de ton implémentation ><

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Par défaut
    Je code en c++.

    Voila la fonction qui calcule la couleur d'un pixel :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    const CColor CSimpleScene::computeLightColor(const CVector3f& view, const CPoint3f& center, const CNormal3f& normal,
    											 const CMaterial& caracteristics)
    {
    	CColor t_color(0, 0, 0);
     
    	//go throught all the lights
    	for(vector<CLight*>::iterator i = m_lights.begin(); i != m_lights.end(); i++)
    	{
    		//get a ray from the object to the light
    		CVector3f L(0, 0, 0);
    		L = (*i)->getCenter() - center; //vector from the point of the object to the light
    		float pathLength = L.norme();
    		L.normalize();
    		CRay ray(center, L); //ray from the object to the light
     
    		//check if there is something between the object and the light
    		if(!testCollision(ray, pathLength)) //no collision
    		{
    			//LAMBERT
    			float LdotN = L.dot(normal); 
    			if(LdotN > 0.f)
    			{
    				t_color += (*i)->getColor()*caracteristics.m_diffuse*LdotN;
     
    			}
    		}
    	}
     
    	//AMBIENT
    	t_color += caracteristics.m_ambient*0.2f;
     
    	return t_color;
    }
    J'ai beau cherché j'ai pas la moindre idée d'où ça peut venir.

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    est ce que tu peux expliquer le rôle des paramètres de ta fonction, j'ai un gros doute là.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Par défaut
    Pas de probleme.

    view : c'est le vecteur directeur du rayon qui part de l'oeil et qui va jusqu'a l'objet (on s'en sert pas pour Lambert, c'est pour Phong).

    center : c'est le point d'intersection entre le rayon et l'objet de la scene.

    normal : la normal de la surface.

    caracteristics : material de l'objet (diffuse, ambient, specular, shininess)

    L c'est un rayon qui part de l'objet et qui va vers la source de lumiere.
    LdotN c'est le cosinus entre le rayon L et la normal.

    (*i)->getColor() c'est la couleur de la lumiere
    caracteristics.m_diffuse c'est la composante diffuse de l'objet
    caracteristics.m_ambient c'est la composante ambient de l'objet

  6. #6
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    tente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CRay ray(center+0.01*L, L); //ray from the object to the light
    pour s'afranchir des erreurs d'approximations

    et/ou
    parce que y a que ça que je vois pas trop l'utilité XD et que c'est peut être normal ces traces noires, je sais pas trop ^^

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Par défaut
    J'ai essayé de changer le point de depart du rayon comme tu m'as dit mais ca marche pas. De plus dans le test d'intersection, je prend deja en compte les approximations des float.

    Le test du produit scalaire c'est pour verifier que le point est eclairé par la lumiere. Si le produit scalaire était negatif, ca enleverait de la lumière.

  8. #8
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    effectivement c'était stupide de ma part, je suis à la recherche de mon ancien raytracer histoire de comparer

    ps: bon moi aussi sur mon rt, j'ai des traits comme les tiens, je sais pas, peut être normal, même si c'est bizarre ><

Discussions similaires

  1. [débutante]Probleme de liens image dans JSP/Servlet
    Par celine31 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/11/2004, 15h51
  2. Probleme register local server dans ibconsole
    Par BOUBOU81 dans le forum Outils
    Réponses: 7
    Dernier message: 05/11/2004, 12h17
  3. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  4. Probleme de composant inclus dans un autre.
    Par viro dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/04/2004, 15h44
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36

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