p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre actif Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : avril 2008
    Messages : 170
    Points : 156
    Points
    156

    Par défaut Lumière ambiante

    Bonjour,

    J'essaie d'utiliser la lumière ambiante pour colorer des vertices.
    Quoi que je fasse, soit le rendu est blanc, soit il est noir.
    Il y a un autre message qui parle du même problème sur le forum, mais je n'arrive pas à en tirer d'information pour résoudre mon problème.

    Je suis parti du programme d'exemple "Vertices" du SDK DirectX.
    Dans l'init, je met toutes les couleurs du VertexBuffer à blanc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        CUSTOMVERTEX Vertices[] =
        {
            { 150.0f,  50.0f, 0.5f, 1.0f, 0xffffffff, }, // x, y, z, rhw, color
            { 250.0f, 250.0f, 0.5f, 1.0f, 0xffffffff, },
            {  50.0f, 250.0f, 0.5f, 1.0f, 0xffffffff, },
        };
    Ensuite, j'active la prise en compte de la lumière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
    Puis j'initialise un light, un material et une couleur ambiante :

    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
     
        g_pLight0.Type = D3DLIGHT_DIRECTIONAL;
        g_pLight0.Direction = D3DXVECTOR3( 1.0f, 0.0f, 1.0f );
     
        g_pLight0.Diffuse.r = 1.0f;
        g_pLight0.Diffuse.g = 1.0f;
        g_pLight0.Diffuse.b = 1.0f;
        g_pLight0.Diffuse.a = 1.0f;
     
        g_pLight0.Specular.r = 1.0f;
        g_pLight0.Specular.g = 1.0f;
        g_pLight0.Specular.b = 1.0f;
        g_pLight0.Specular.a = 1.0f;
     
        g_pd3dDevice->SetLight( 0, &g_pLight0 );
        g_pd3dDevice->LightEnable( 0, TRUE );
     
        ZeroMemory( &mtrl, sizeof(mtrl) );
        mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
        mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
        mtrl.Diffuse.b = mtrl.Ambient.b = 0.0f;
        mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;
     
        g_pd3dDevice->SetMaterial( &mtrl );
        g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xFFFF20FF );
    et là, rien... Je reste désespérément avec un triangle blanc dans la fenêtre.

    J'ai essayé en désactivant les COLORVERTEX, ou en mettant tous les xxxMATERIALSOURCE à D3DMCS_MATERIAL, parce que j'ai trouvé ça dans un tuto (dx9_materials sur un des sites donné dans un post du forum)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        g_pd3dDevice->SetRenderState( D3DRS_COLORVERTEX, FALSE );
    ...
            g_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );
            g_pd3dDevice->SetRenderState( D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL );
            g_pd3dDevice->SetRenderState( D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL );
            g_pd3dDevice->SetRenderState( D3DRS_EMISSIVEMATERIALSOURCE, D3DMCS_MATERIAL );
    Mais rien n'y fait.
    Qu'est-ce que j'ai oublié ?

  2. #2
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    août 2002
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 078
    Points : 1 676
    Points
    1 676

    Par défaut

    Toutes les équations liées à la lumière dans DirectX sont là :
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Sinon, les modèles d'éclairage "fixes" sont de moins en moins utilisés dans les jeux et tout se fait par shaders (même si les formules de bases peuvent rester les mêmes).

    LeGreg

    Recherche Ingé GPGPU ! | Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    Membre actif Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : avril 2008
    Messages : 170
    Points : 156
    Points
    156

    Par défaut

    Merci,

    J'ai déjà parcouru pas mal de doc et de tutos, mais je n'ai rien trouvé pour résoudre mon problème.

    Le besoin initial, c'est que j'ai un VertexBuffer qui contient des données à afficher sous forme de points ou de lignes, et dont la couleur peut varier. Mais tous les points du buffer sont de la même couleur. Donc au lieu de préciser la couleur pour chacun, j'aurais préféré un moyen global de le faire.

    Comme je n'arrive pas à le faire avec les lights, je l'ai fait autrement : J'ai décomposé mon VertexBuffer en 2, un qui contient les coordonnées des points, et un autre qui contient les couleurs.
    Ensuite, j'utilise les streams 0 et 1 pour dessiner mes points.
    C'est pas très beau, puisque mon VertexBuffer de couleur contient tout le temps la même chose.
    J'ai essayé en mettant le stride à 0 quand j'initialise le stream 1 pour le rendu, mais ça ne semble pas marcher.

    Y'a-t-il un meilleur moyen de faire ?

    Merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/03/2011, 21h12
  2. Modification de la lumière
    Par polonain2 dans le forum OpenGL
    Réponses: 8
    Dernier message: 26/05/2004, 12h23
  3. Vocabulaire : besoin de vos lumières...
    Par SteelBox dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 27/02/2004, 13h25
  4. Réponses: 19
    Dernier message: 07/11/2003, 08h10
  5. Problème lumière
    Par Francky033 dans le forum DirectX
    Réponses: 3
    Dernier message: 15/07/2003, 05h05

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