begin process at 2010 02 10 16:15:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

Z-Buffer fait des siennes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Z-Buffer fait des siennes

lundi 19 mars 2007 à 18:42:41 | Z-Buffer fait des siennes

bizzard4

Membre Club
J'ai un problème avec mon Z-Buffer. Il affiche très bien la partie droite et le dessous de mes cubes. Mais quand il est temps d'afficher le côté gauche de le dessus il met la face par dessus mais elle devrait être caché.

J'ai cherché des solutions mais je n'ai pas de piste sur la source du problème. D'après mois c'est mon Z-Buffer mais j'ai aussi de la misère à me faire une idée du sens de mes triangles. Doivent t'ils être dans le sens triginométrique par rapport au centre (0,0,0) au bien cela n'a pas d'importante ?

J'ai un screenshot du résultatzbuffer.JPG

Merci à l'avance.

~~ Cordialement Francois Gingras
lundi 19 mars 2007 à 19:00:11 | Re : Z-Buffer fait des siennes

luhtor

Si tu n'as pas activé de culling particulier, l'ordre des indices pour afficher un triangle n'a pas d'importance.

Pour ton pb, tu es sur d'avoir activer le zbuffer ?
lundi 19 mars 2007 à 19:24:58 | Re : Z-Buffer fait des siennes

spiky31

Membre Club
Par defaut, les faces avant doivent etre dessinées dans le sens inverse des aiguilles d'une montre (mais tu peux le modifier avec glFrontFace).

Donc si tes triangles sont dessinées dans le bon ordre et que tu as activé le z-buffer (glEnable(GL_DEPTH_TEST)) il ne devrait pas y avoir de problemes.

lundi 19 mars 2007 à 22:08:24 | Re : Z-Buffer fait des siennes

bizzard4

Membre Club
spiky31 : C'est du DirectX mais cela revient au même.

Mon z-buffer et mon culling sont activés :
    g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
    g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);
    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, true);

Et l'ordre de mes triangles est correctes car je les vois tous sans problème mais j'ai toujours le problème. C'est peux être mon VertexBuffer ? je vais vous montrez le code pour "seter" mes carrés.

int k = 0;
    for (int j = 0; j < 10; j++)
    {
        for (int i = 0; i < 10; i++)
        {
            // Fond :: Rouge
            g_Vertices[(j*360)+(i*36)+0].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+0].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+0].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+1].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+1].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+1].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+2].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+2].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+2].tv = 0.0f;

            g_Vertices[(j*360)+(i*36)+3].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+3].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+3].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+4].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+4].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+4].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+5].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+5].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+5].tv = 0.0f;

            // Top :: Vert
            g_Vertices[(j*360)+(i*36)+6].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+6].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+6].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+7].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+7].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+7].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+8].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+8].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+8].tv = 1.0f;

            g_Vertices[(j*360)+(i*36)+9].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+9].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+9].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+10].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+10].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+10].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+11].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+11].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+11].tv = 0.0f;

            // Face Devant :: Bleu
            g_Vertices[(j*360)+(i*36)+12].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+12].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+12].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+13].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+13].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+13].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+14].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+14].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+14].tv = 1.0f;

            g_Vertices[(j*360)+(i*36)+15].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+15].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+15].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+16].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+16].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+16].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+17].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+17].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+17].tv = 0.0f;

            // Face derrìère :: Rose
            // PROBLEME LA FACE PASSE PAR DESSUS LES AUTRES
            g_Vertices[(j*360)+(i*36)+18].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+18].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+18].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+19].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+19].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+19].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+20].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+20].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+20].tv = 0.0f;

            g_Vertices[(j*360)+(i*36)+21].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+21].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+21].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+22].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+22].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+22].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+23].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+23].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+23].tv = 0.0f;

            // Face Gauche :: Cyan
            // PROBLEME LA FACE PASSE PAR DESSUS LES AUTRES
            g_Vertices[(j*360)+(i*36)+24].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+24].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+24].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+25].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+25].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+25].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+26].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+26].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+26].tv = 1.0f;

            g_Vertices[(j*360)+(i*36)+27].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+27].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+27].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+28].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+28].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+28].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+29].position = D3DXVECTOR3(-5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+29].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+29].tv = 0.0f;

            // Face Droite :: Jaune
            g_Vertices[(j*360)+(i*36)+30].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+30].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+30].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+31].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+31].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+31].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+32].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+32].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+32].tv = 1.0f;

            g_Vertices[(j*360)+(i*36)+33].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), -5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+33].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+33].tv = 1.0f;
            g_Vertices[(j*360)+(i*36)+34].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), -10.0f);
            g_Vertices[(j*360)+(i*36)+34].tu = 1.0f;
            g_Vertices[(j*360)+(i*36)+34].tv = 0.0f;
            g_Vertices[(j*360)+(i*36)+35].position = D3DXVECTOR3(5.0f + (11.0f * (float)i), 5.0f - (11.0f * (float)j), 0.0f);
            g_Vertices[(j*360)+(i*36)+35].tu = 0.0f;
            g_Vertices[(j*360)+(i*36)+35].tv = 0.0f;
        }
    }

    // Setup des couleurs
        // met tout en blacn
    for (k = 0; k < 3600; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(255, 255, 255);
    }
        // sauf la première case du haut :: Vert
    for (k = 0; k < 36; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(0, 255, 0);
    }
        // et la dernière
    for (k = 3564; k < 3600; k++)
    {
        g_Vertices[k].color = D3DCOLOR_XRGB(255, 0, 0);
    }

Si quelqu'un a une solution ou une idée pour réglé je suis preneur !

~~ Cordialement Francois Gingras
lundi 19 mars 2007 à 22:18:11 | Re : Z-Buffer fait des siennes

bizzard4

Membre Club
Réponse acceptée !
Bon !! J'ai trouvez la source de mon problème. C'est que je n'avais pas activez le :

    d3dpp.EnableAutoDepthStencil = true;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

Mais maintenant j'ai un nouveau bug

J'ai essayé sur plusieurs ordinateur pour savoir si c'est mon code ou ma carte 3D mais c'est mon code :

Screenshot:
bug2.JPG

Voila mes cubes sont maintenant complètement sacadé...

Si quelqu'un a une solution.

~~ Cordialement Francois Gingras
lundi 19 mars 2007 à 22:22:22 | Re : Z-Buffer fait des siennes

bizzard4

Membre Club
Réponse acceptée !
Bon je reposte pour une troisième fois !!! Désolé pour les postes sucétif.

J'ai trouvez mon erreur. J'explique :

Je ne "clearait" pas la buffer comme du monde. J'ai oublier de vider le zbuffer. Alors j'ai changé la ligne de mon clear
De : g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
À : g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);

Maintenant tout marche à merveille !

~~ Cordialement Francois Gingras


Cette discussion est classée dans : buffer, problème, dessus, sens


Répondre à ce message

Sujets en rapport avec ce message

problème de spin [ par albertoC ] re-bonjour,J'ai maintenant un problème avec un spin. Voilà le code qui me sert à l'initialiser (m_SProfondeur est un pointeur sur un spin, et m_Profon problème de fenêtre "effacée" [ par MLine ] J'utilise C++ Builder 5 et j'affiche plusieurs fiches dynamiquement. Mon problème est que le contenu de ces fiches est effacé lorsqu'une autre fenêtre pb de buffer [ par bobyby ] bonjour voilà mon problème : Je parcours un fichier .txt et je stocke chaque ligne qui m'interesse dans un buffer. il me faut donc créer n buffer : Problème d'affichage, couleurs, faces visibles/cachées [ par Tibabou ] Bonjour/soir, Avec le code ci-dessous, j'obtiens une sphère "bizarre", j'ai le même problème avec des cubes, on voit le fond à certains endroits:<IMG [visual C++] problème (très bizarre) avec un CString [ par drinkmilk ] Bonjour, je fait une requête sur une base access. Je récupère les données ainsi: <T Aide pour un problème de string ! [ par florian138 ] Bonjour,Je dois créer un programme en C++ dans lequel j'ouvre un fichier je lis les données que je met ensuite dans un "char" du nom de buffer...Dans Borland : GetSelTextBuf et Edit Problème [ par Booster ] Bonjours a tous, Voila j'ai un petit sousi, Je voudrais mettre le contenue d'une Edit dans un buffer, j'ai trouver la fonction GetSelTextBuf mais cell Double Buffer !!!!!!!!!!!! [ par BugcORE ] SA FAIT un bon moment que j'essai de fairefonctionner un Double Buffer !J'ai eu pas mal de problème avec !(U.C. 100%, Affiche rien, etc....)J'arrive m Problème lors de la récéption de données en HTTP [ par Fran6web ] Bonjour,Je suis en train de me faire un programme en C qui me récupère le contenu d'un page envoyé par protocole HTTP.J'ai cependant un p'tit problème problème de getdevicestate [ par vini456 ] Bonsoir,J'ai une exception lorsque j'exécute mon programmepourtant il me semble que tout est correct.TCHAR buffer [256]; ZeroMemory( &buffer, sizeof(b


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales