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

Android Discussion :

[OpenGL ES] Récupérer la profondeur (depth)


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut [OpenGL ES] Récupérer la profondeur (depth)
    Bonjour,

    j'aimerai récupérer la profondeur (depth) d'un point de l'écran, sachant que à l'écran j'ai un GLSurfaceView.Renderer (i.e. un objet 3D).
    Quelqu'un sait comment faire ?
    (j'ai lu que je ne pouvais pas lire dans le depth buffer avec OpenGL es, mais si qqun a une idée, merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Normalement non on ne peut pas lire "facilement" dans le z-buffer (pour une raison d'optimisation drastique de ceux ci).

    De toute manière même en DirectX l'opération prend un temps fou et stall complètement le pipeline de rendu...

    Mais que veux tu en faire de cette valeur ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut
    Pour être précis, la valeur de 'depth' ne m'interesse pas, mais je veux savoir si lors d'un clic, je touche mon objet 3D (GLSurfaceView) ou si je touche le 'fond' de la scène.

    Et le Depth_buffer m'aurait permis de récupérer une profondeur nulle lors d'un clic "dans le fond" et une profondeur non nulle sinon.

    On m'a parlé d'une technique de 'lancer de rayon', mais je ne m'y connais pas du tout...

    J'essaie de trouver plus d'informations pour le moment

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ha ben ouais on fait pas du tout comme ça en réalité

    En général la scene est composée d'objets...
    Chaque objet contient une (ou plusieurs) mesh (passées à OpenGL) avec pour chaque point 1 ou plusieurs transformations (matrices).
    Ces transformations proviennent du 'squelette' de l'objet (qui peut être un simple point). Ce squelette, géré par le programme intègre souvent le moteur physique (joints / solides), et donc est approximé avec des solides simples (en général un parallélépipède rectangle, ou un ellipsoïde).

    Pour faire un "hit-test"... on prend une demi-ligne qui part du pixel et s'enfonce dans l'écran (z = t, x=px, y=py)... On transforme cette demi-ligne dans le monde (l'inverse de la view-transform donc). Et on traverse le graph des objets...

    Test simple contre la sphere englobante de l'objet (facile à récupérer) c'est un simple test de distance d'un point à une droite....
    Test "hitbox" (on rentre dans l'objet et pour chaque élément du squelette, test contre son solide simple: ellipsoide, ou parallélépipède rectangle). La encore c'est facile (on passe dans le repère de l'élément: inverse de la transformation de l'élément, et on teste les distances en X/Y/Z)
    Si enfin, on a besoin d'avoir un point précis de mesh (pour poser un decal par exemple comme un impact de balle), et que les deux test précédent ont réussi, alors on peut tester chaque triangle de la mesh... Sur un triangle c'est facile de vérifier que la droite passe dedans par simple projection vectorielle. Et on n'a besoin de tester que les partie de mesh qui correspondent aux hitbox trouvées..

    Voila voila... ^^

Discussions similaires

  1. Récupérer la profondeur d'un bloc dans un schéma
    Par Fointard dans le forum Simulink
    Réponses: 2
    Dernier message: 08/06/2012, 15h48
  2. [XSLT 1.0] Récupérer la profondeur maximale d'un élément
    Par Jerome Briot dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/03/2012, 20h25
  3. Réponses: 5
    Dernier message: 08/09/2009, 00h10
  4. Depth buffer dans texutre ( opengl )
    Par Rastacouéne dans le forum OpenGL
    Réponses: 43
    Dernier message: 22/07/2008, 20h22
  5. Problème de profondeur avec OpenGL et GLUT
    Par brotelle dans le forum GLUT
    Réponses: 3
    Dernier message: 12/03/2006, 14h47

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