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

OpenGL Discussion :

Problemes - sans doute bete - de profondeur


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 097
    Par défaut Problemes - sans doute bete - de profondeur
    Bonjour,

    J'essaye d'afficher une pièce d'echec sur opengl.. et sans jeu de mots pourri, c'est un echec.

    Nom : Capture d’écran 2022-08-19 133637.png
Affichages : 117
Taille : 8,3 Ko

    J'utilise la librairie opengl.net pour coder en c# winform.

    Cela est le code d'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
    16
    17
                Gl.MatrixMode(MatrixMode.Projection);
                // Load (reset) to identity
                Gl.LoadIdentity();
                // Multiply with orthographic projection
                Gl.Ortho((double) - 150,150, (double) - 150, 150, -150, 150);
     
           //     Gl.ClearDepth(1.0f);
                Gl.Enable(EnableCap.DepthTest);
                Gl.Enable(EnableCap.LineSmooth);
                Gl.DepthMask(false);
                Gl.ShadeModel(ShadingModel.Smooth);
                Gl.Enable(EnableCap.Normalize);
                Gl.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
                Gl.Enable(EnableCap.ColorMaterial);
     
                Gl.Enable(EnableCap.Lighting);
                Gl.Enable(EnableCap.Light0);
    Et voilà le code d'affichage

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
                //  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                Gl.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit);
     
                Gl.LightModel(LightModelParameter.LightModelAmbient, ambient_model);
                Gl.Material(MaterialFace.FrontAndBack, MaterialParameter.AmbientAndDiffuse, mat_diffusion);
                Gl.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, mat_specular);
                Gl.Light(LightName.Light0, LightParameter.Diffuse, diffusion);
                Gl.Light(LightName.Light0, LightParameter.Position, position);
     
                Control senderControl = (Control)sender;
     
                // Setup model-view matrix
     
                // Model-view matrix selector
                Gl.MatrixMode(MatrixMode.Modelview);
                // Load (reset) to identity
                Gl.LoadIdentity();
                Gl.Rotate(_Angle++, 0.0f, 1.0f, .0f);
     
                Gl.Scale(0.5, 0.5, 0.5);
                Gl.Begin(PrimitiveType.Triangles);
     
                int index = 0;
     
     
                for (int i = 0; i < theObject.size; ++i)
                {
                    index = (i * 8);
                    // Feed triangle data: color and position
                    // Note: vertex attributes (color, texture coordinates, ...) are specified before position information
                    // Note: vertex data is passed using method calls (performance killer!)
                 //   Gl.Color3(c1[i % 3]);
                    Gl.Normal3(theObject.position_texture_normal[index + 5], theObject.position_texture_normal[index + 6], theObject.position_texture_normal[index + 7]);
                    Gl.TexCoord2(theObject.position_texture_normal[index+3], theObject.position_texture_normal[index+4]);
                    Gl.Vertex3((float)theObject.position_texture_normal[index], theObject.position_texture_normal[index + 1], theObject.position_texture_normal[index + 2]);
     
                }
                // Triangles ends
                Gl.End();
    J'avais essayé d'utiliser le DepthTest avec differente valeur de paramètre (voir en le desativant).
    Je me disais que c'etait parce que je ne l'avais pas mis car en faisant une rotation de pièce, le socle de la pièce restait au premier plan.

    Pourriez vous m'aider ?
    Merci.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Salut !

    Il te faut effectivement activer le depth test, et pour ça plusieurs choses sont nécessaires :
    • Gl.Enable(EnableCap.DepthTest);
    • Créer un depth buffer, et l'attacher à ton framebuffer (ou, si tu n'utilises pas de framebuffer et que tu dessines directement dans la fenêtre, initialiser celle-ci avec la depth activée)
    • Gl.DepthMask(true); et là, de ton côté, c'est mis à false, ce qui désactive l'écriture dans le depth buffer.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 097
    Par défaut
    Bonsoir,

    Merci de ta réponse.

    J'ai ajouté ces lignes dans la fonction de rendu.

    Nom : Capture d’écran 2022-08-19 220427.png
Affichages : 81
Taille : 21,4 Ko

    Ca me fait toujours le meme probleme :-/

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 097
    Par défaut
    Bon, me revoilà.

    J'ai été idiote, j'ai oublié de mettre la property DepthBit à 24.

    Et ca fonctionne parfaitement :

    Nom : Capture d’écran 2022-08-19 225042.png
Affichages : 82
Taille : 12,0 Ko


    Merci encore !

    Florence

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme pour faire Menu ! (sans doute facile à résoudre)
    Par romyschneider dans le forum Flash
    Réponses: 0
    Dernier message: 15/08/2008, 23h23
  2. Plantage sans doute par manque de mémoire
    Par verbose dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 15/11/2007, 12h18
  3. [sans doute bete] transformer une chaine en variable.
    Par Vanish dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/02/2007, 17h12
  4. Réponses: 6
    Dernier message: 26/11/2006, 19h36

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