Face transparente

Résolu
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009 - 17 mars 2007 à 03:09
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009 - 17 mars 2007 à 21:13
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

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
17 mars 2007 à 17:44
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).
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
17 mars 2007 à 13:33
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...
0
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
17 mars 2007 à 13:37
Fait voir ton code.
Tu es sur de ne pas avoir dessiner de faces a l'envers?.
0
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009
17 mars 2007 à 14:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sam20 Messages postés 184 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 26 mai 2016 3
17 mars 2007 à 15:28
 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
0
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009
17 mars 2007 à 20:14
Parfait j'ai comprit maintenant !

~~ Cordialement Francois Gingras
0
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009
17 mars 2007 à 21:13
Pour sam20 :

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

~~ Cordialement Francois Gingras
0
Rejoignez-nous