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 :

Placement de lumiere


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Par défaut Placement de lumiere
    Hello, j'ai un soucis que je n'arrive pas a élucider.
    J'ai un mesh (rectangle), un autre mesh qui represente ma lumiere et un Vector3f qui est la position de ma lumiere.

    je place ma camera a (0.f, 2.f, -5.f).
    Je place donc mon mesh au centre ainsi que mon Lightmesh et je set la position de ma lumiere(ogl ou dx) au centre aussi (via le vector3f).

    Pour le render, je load ma matrix de model, puis la matrix de projection et je render le mesh principal.
    Ensuite je load la matrice de mon LightMesh et je le render.

    Le probleme c'est que la zone eclairée n'est pas au centre, je suis obliger de shifter la position de la lumiere de +5.f sur l'axe des Z (l'inverse du placement de ma camera) pour que celle ci eclaire reelement le centre.

    Voila a quoi ca ressemble:

    Initialisation :
    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
     
    fMeshLengthAlongX = 10.f;
    fMeshLengthAlongZ = 10.f;
     
    m_CameraPos.Set(0.f, 2.f, -5.f);
    m_MatView3D.LookAt(m_CameraPos, m_CameraPos + Vector3F(0.0f, -0.0f, 1.0f));
    m_MatProj3D.PerspectiveFOV(fPi / 2, 640.0f / 480.0f, 1.0f, 1000.0f);
     
    CreateMesh(Vector3F(-m_fMeshLengthAlongX / 2, 0.f, -m_fMeshLengthAlongZ / 2));
     
    CreateLightMesh(Vector3F(0.f, 2.5f, 0.f));
    m_LightMatrix.Identity();
     
    // Creation lumiere hardware
    InitLights(Vector3F(0.f, 2.5f, 5.f)); // Si Z == 0.f, decalage de la lumiere
    Rendering:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Renderer()->LoadMatrix(MODELVIEW, m_Rotation * m_MatView3D);
    Renderer()->LoadMatrix(PROJECTION, m_MatProj3D);
    Renderer()->EnableRenderParam(RENDER_ZWRITE, true);
     
    Renderer()->SetMaterial(m_Material);
     
    m_pMesh->Render();
     
    Renderer()->LoadMatrix(MAT_MODELVIEW, m_LightMatrix * m_Rotation * m_MatView3D);
    m_pLightMesh->Render();
    Ce doit etre une grosse faute de debutant, mais je ne vois pas laquel

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 20
    Par défaut
    Les coordonnées du mesh que tu spécifie sont basés sur un de ces coins je suppose, pas son centre. En mettant ton mesh au centre de ton repère, son centre de gravité se trouve un peu en hauteur. C'est plus simple à comprendre en 2D je pense..

    Sur un dessin 2D, les coordonnées d'un rectangle est représenté par la coordonnée de son coin supérieur gauche. en mettant le Rectangle à 0,0, tu mets le point supérieur gauche en 0,0, pas le centre de gravité du rectangle.

    Si tu veux ton rectangle bien centré en 0,0, il faut lui faire une translation de la moitié de sa hauteur, puis de la moitié de sa largeur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Par défaut
    Hello, merci de ta reponse.

    C'est ce que je fais si tu regarde la fonction createMesh, je na pass pas 0, 0, 0 ,mais bien -5, 0, -5.
    De plus le decalage est en fonction de la position du point de vu (ici -5 sur l'axe des Z, donc +5 pour corriger).

  4. #4
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Peut-être je vais dire une annerie sans rapport, mais j'en suis pas sûr.
    Si tu es en opengl, la projection se faisant suivant l'axe z, le -z vers le lointain, et le +z vers l'écran, et inversement sous directx il me semble.
    Peut-être est-ce là l'origine de ton problème ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Par défaut
    Hello, je ne pense pas que cela vienne de ce que tu decris, car sinon le resultat serait different entre Opengl et directx (?).

    Merci pour ta reponse.

Discussions similaires

  1. [HTML][Image] Placement de la zone d'option
    Par olivangel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/11/2004, 13h28
  2. Un peu de lumière sur l'arborescence des fichiers de Linux
    Par Noki dans le forum Administration système
    Réponses: 6
    Dernier message: 07/04/2004, 16h16
  3. [light] Comment fait-on une lumiere constante ?
    Par :GREG: dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/03/2004, 17h54
  4. Placement aléatoire
    Par Steph82 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/09/2003, 12h07
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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