Face transparente

[Résolu]
Signaler
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009
-
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009
-
Bonjour

J'explique mon problème. J'ai fait un cube à la main avec 36 vertex. J'ai mit une couleur différente sur chaque face mais j'ai bizarement j'ai des faces transparentes. Comme si DirectX n'était pas capable de savoir quelle face est dévant et derrière.

Pourtant :
g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

Mon cullmode est configurer de façon a afficher les 2 faces de mes triangles.

Ici j'ai une image :

Le face délémité en rouge devrait être verte mais bizarement je vois les 2 faces d'en dessous sont verte sauf elle du bas Je ne comprend vraiment pas.

Et la face délémiter en blanc devrait elle être rouge. Mais nous devrions pas la voir parce qu'elle est en arrière.

Si quelqu'un connaît la solution.

~~ Cordialement Francois Gingras

7 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Comme je disais auparavant,il faut utiliser le culling car ici comme tu affiches tout, il dessine les faces supposées non visibles par dessus les visibles et c'est le bazard. Faut utiliser D3DCULL_NONE seulement quand on veut voir ce qu'il y a derrière (ex.faces translucides etc..)
Ici :
g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
et déclarer tes triangles en conséquence (sens trigo ici).
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Je comprends pas trop ce que tu veux faire :
pour que justement seules les faces visibles soient affichées, il faut utiliser le culling. Sinon DX va même pas chercher à savoir ce qu'on est censé voir, il va tout afficher.
Si tu pouvais spécifier le résultat que tu aimerais obtenir...
Autre chose en passant : utilise un indexbuffer, y aura que 8 points à stocker...
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Fait voir ton code.
Tu es sur de ne pas avoir dessiner de faces a l'envers?.
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009

Bonjour

Je veux seulement faire un cube opaque. Parce que la comme tu le voie sur le screen shot le carré délémiter en rouge on le voie pas mais sa couleur est sur la face du fond et sur la face du côté.

Voici le code pour mon cube :

    CUSTOMVERTEX g_Vertices[3600];

    // Création de Vertices Manuelle
    int k = 0;
    // Fond :: Rouge
    g_Vertices[0].position = D3DXVECTOR3(-5.0f, -5.0f, 0.0f);
    g_Vertices[1].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[2].position = D3DXVECTOR3(-5.0f, 5.0f, 0.0f);

    g_Vertices[3].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[4].position = D3DXVECTOR3(5.0f, 5.0f, 0.0f);
    g_Vertices[5].position = D3DXVECTOR3(-5.0f, 5.0f, 0.0f);
    for (k = 0; k < 6; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(255, 0, 0);
    }

    // Top :: Vert
    g_Vertices[6].position = D3DXVECTOR3(-5.0f, -5.0f, -10.0f);
    g_Vertices[7].position = D3DXVECTOR3(5.0f, -5.0f, -10.0f);
    g_Vertices[8].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);

    g_Vertices[9].position = D3DXVECTOR3(5.0f, -5.0f, -10.0f);
    g_Vertices[10].position = D3DXVECTOR3(5.0f, 5.0f, -10.0f);
    g_Vertices[11].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);
    for (k = 6; k < 12; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(0, 255, 0);
    }

    // Face Devant :: Bleu
    g_Vertices[12].position = D3DXVECTOR3(-5.0f, -5.0f, 0.0f);
    g_Vertices[13].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[14].position = D3DXVECTOR3(-5.0f, -5.0f, -10.0f);

    g_Vertices[15].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[16].position = D3DXVECTOR3(5.0f, -5.0f, -10.0f);
    g_Vertices[17].position = D3DXVECTOR3(-5.0f, -5.0f, -10.0f);
    for (k = 12; k < 18; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(0, 0, 255);
    }

    // Face derrìère :: Rose
    g_Vertices[18].position = D3DXVECTOR3(-5.0f, 5.0f, 0.0f);
    g_Vertices[19].position = D3DXVECTOR3(5.0f, 5.0f, 0.0f);
    g_Vertices[20].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);

    g_Vertices[21].position = D3DXVECTOR3(5.0f, 5.0f, 0.0f);
    g_Vertices[22].position = D3DXVECTOR3(5.0f, 5.0f, -10.0f);
    g_Vertices[23].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);
    for (k = 18; k < 24; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(255, 0, 255);
    }

    // Face Gauche :: Cyan
    g_Vertices[24].position = D3DXVECTOR3(-5.0f, 5.0f, 0.0f);
    g_Vertices[25].position = D3DXVECTOR3(-5.0f, -5.0f, 0.0f);
    g_Vertices[26].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);

    g_Vertices[27].position = D3DXVECTOR3(-5.0f, -5.0f, 0.0f);
    g_Vertices[28].position = D3DXVECTOR3(-5.0f, -5.0f, -10.0f);
    g_Vertices[29].position = D3DXVECTOR3(-5.0f, 5.0f, -10.0f);
    for (k = 24; k < 30; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(0, 255, 255);
    }

    // Face Droite
    g_Vertices[30].position = D3DXVECTOR3(5.0f, 5.0f, -10.0f);
    g_Vertices[31].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[32].position = D3DXVECTOR3(5.0f, -5.0f, -10.0f);

    g_Vertices[33].position = D3DXVECTOR3(5.0f, -5.0f, 0.0f);
    g_Vertices[34].position = D3DXVECTOR3(5.0f, 5.0f, 0.0f);
    g_Vertices[35].position = D3DXVECTOR3(5.0f, 5.0f, -10.0f);
    for (k = 30; k < 36; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(255, 255, 0);
    }

    // Create the vertex buffer.
    if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3600*sizeof(CUSTOMVERTEX),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    {
        return E_FAIL;
    }

~~ Cordialement Francois Gingras
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
 Vertex g_Vertices[] =
{
{-1.0f, 1.0f,-1.0f},
 { 1.0f, 1.0f,-1.0f},
 {-1.0f,-1.0f,-1.0f },
 { 1.0f,-1.0f,-1.0f},
 
 {-1.0f, 1.0f, 1.0f},
 {-1.0f,-1.0f, 1.0f},
 { 1.0f, 1.0f, 1.0f},
 { 1.0f,-1.0f, 1.0f},
 
 {-1.0f, 1.0f, 1.0f},
 { 1.0f, 1.0f, 1.0f},
 {-1.0f, 1.0f,-1.0f },
 { 1.0f, 1.0f,-1.0f},
 
 {-1.0f,-1.0f, 1.0f},
 {-1.0f,-1.0f,-1.0f},
 { 1.0f,-1.0f, 1.0f,},
 { 1.0f,-1.0f,-1.0f,},


 { 1.0f, 1.0f,-1.0f },
 { 1.0f, 1.0f, 1.0f},
 { 1.0f,-1.0f,-1.0f},
 { 1.0f,-1.0f, 1.0f},
 
 {-1.0f, 1.0f,-1.0f},
 {-1.0f,-1.0f,-1.0f},
 {-1.0f, 1.0f, 1.0f },
 {-1.0f,-1.0f, 1.0f }
};

 g_pd3dDevice->CreateVertexBuffer( 24*sizeof(Vertex),0, CUSTOMVERTEX,
                                      D3DPOOL_DEFAULT, &g_pVertexBuffer, NULL );

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009

Parfait j'ai comprit maintenant !

~~ Cordialement Francois Gingras
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009

Pour sam20 :

Merci mais pour les besoins de la cause je suis en D3DPT_TRIANGLELIST

~~ Cordialement Francois Gingras