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 :

Niveau de gris depth buffer Opengl


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Niveau de gris depth buffer Opengl
    Bonjour ,

    je voulais savoir si il était possible d'obtenir avec opengl une plage de niveaux de gris de 0 à 65535 sans qu'elle soit adapter à la plage(0 255). Pour que cela soit plus claire j'ai créer une image de profondeur de 16 bits avec comme paramètre Near= 0.1 et Far= 65535 .Je voudrais obtenir pour chaque unité de cette plage un niveau de gris précis, le problème est que les valeurs se sont adapté à la plage 0 255 donc (65535/255=257) toute les 257 unité j'ai un changement de niveau de gris ce qui pose problème car j'aimerais avoir un changement pour chaque unité et non toute les 257 unités.

    Comment puis je faire?

    Merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Habituellement, un tampon de profondeur est codé sur 24 bits (+ 8 bits du stencil), ou directement sur 32 bits (sans stencil). Donc, vous ne devriez pas avoir cet effet (du moins, pas par rapport à la partie rendu dans le tampon de profondeur). Par conséquent, cela devrait donc dépendre de comment vous récupérer les données.
    De plus :
    Near= 0.1 et Far= 65535
    Cela ne tiens pas sur 16 bits. Ce que vous voudriez, c'est Near = 1, Far = 65535. Mais même ainsi, OpenGL (c'est-à-dire : la carte graphique) va faire un peu ce qu'il veut, car c'est un tampon en nombre flottant.

    En bref, qu'est ce que vous voulez vraiment faire ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    merci pour votre réponse

    je veux que pour chaque valeur entre 1 et 65535 j'ai une valeur en niveau de gris,exemple je place mon objet a 6000 unité (objet qui n'est pas plat) je veux que la valeur en niveau de gris soit de 6000 et que les parties plus hautes de mon objet aient une valeur de 5995,5996 ...

    voici le fragment shader que j'utilise:

    Code glsl : 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
    #version 330 core
     
    float near = 0.1;
    float far = 65535;
     
    float LinearizeDepth(float depth)
    {
        float z = depth * 2.0 - 1.0; // back to NDC
        //return (2.0 * near * far) / (far + near - z * (far - near));
        return (2.0 * near * far) / (far + near - z * (far - near));
    }
     
    void main()
    {
        float depth = LinearizeDepth(gl_FragCoord.z) / far;
        gl_FragColor = vec4(vec3(depth), 1.0);
    }

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Autre précision : le tampon de profondeur n'est pas linéaire.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    l'equation dans ma fonction "LinearizeDepth" ne rend pas la valeur linéaire?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je ne comprends pas votre calcul.
    De plus, je remarque :
    • vous faites le rendu dans un tampon de couleur, donc les composantes de la couleur sont entre 0 et 255 (enfin, ça dépend du format, mais j'imagine que vous avez une configuration classique))
    • vous mettez la profondeur, dans les trois composants R, G, B. Cela donne du gris, mais surtout, avec le commentaire précédent, vous ne gardez pas du tout la précision voulu.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    j'ai créer une texture que j'ai lié au tampon de couleur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,OutputFrameWidth,OutputFrameHeight, 0, GL_LUMINANCE, GL_UNSIGNED_SHORT,NULL);
    Pour le fragment shader je me suis inspiré de ce chapitre:
    https://opengl.developpez.com/tutori...bandonn%C3%A9.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Pour moi, pour écrire dans le tampon de profondeur, vous devriez écrire dans la variable gl_FragDepth.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    d'accord du coup je dois attacher ma texture au tampon de profondeur et non au tampon de couleur ?

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Oui, c'est ce que je pensais que vous vouliez faire. Ou alors, utiliser une texture de couleur avec une précision étendue.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    qu'est ce que vous sous entendez par précision étendue ?

  12. #12
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Généralement, le tampon de couleur, pour le rendu/ou l'affichage, c'est un tampon R8G8B8A8. Toutefois, certaines cartes graphiques proposent d'autres formats, notamment, le R16...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    d'accord je vais voir comment je peux m'y prendre, Merci pour vos conseils

Discussions similaires

  1. Depth buffer dans texutre ( opengl )
    Par Rastacouéne dans le forum OpenGL
    Réponses: 43
    Dernier message: 22/07/2008, 20h22
  2. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04
  3. conversion bmp en niveau de gris
    Par hholivier dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2003, 13h34
  4. niveau de gris en niveau de couleur
    Par corey_jx dans le forum MFC
    Réponses: 2
    Dernier message: 11/06/2003, 22h36
  5. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41

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