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 :

calcul de l'aire visible d'une sphère


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut calcul de l'aire visible d'une sphère
    Bonjour,
    comme indiqué dans mon titre, j'affiche une sphère ainsi que d'autres éléments dans ma scène 3D, et je souhaiterais pouvoir calculer l'aire visible par l'utilisateur (qui se trouve à une position fixe et connue)

    En réfléchissant et en cherchant un peu, j'ai envisagé la méthode indiquée à la fin de cet article, et qui consisterait à compter dans un buffer les pixels appartenant à ma sphère... Mais la question que je vous pose, c'est : Comment faire ???

    D'ailleurs, peu importe la méthode, si vous avez une solution avec une autre méthode je suis preneur ! Même si c'est pas très rapide...

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu veux dire que tu veux compter les pixels rendus par ta sphère en space écran avec une vue / projection particulière ?
    Ou bien tu veux compter en espace monde ce que l'utilisateur voit de ta sphère ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut
    Concrètement, j'ai une sphère et un point de vue. Je voudrais dans un premier temps compter le nombre de pixels de la sphère que l'on voit depuis le point de vue, puis ensuite rajouter des obstacles et compter à nouveau le nombre de pixels visibles de la sphère pour comparer les deux.

    Je ne suis pas sûr de m'y connaître suffisamment en OpenGL pour expliquer tout ça en langage technique (espace écran, espace monde, etc), mais ce qui m'intéresse c'est ce que l'on voit depuis un point précis

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    si tu as accès à l'extension concernant l'occlusion query
    http://www.opengl.org/registry/specs...sion_query.txt
    tu peux t'en servir, ça te facilitera le travail et c'est rapide

    dans le cas contraire, il faudra utiliser :
    - au pire, sans extension, readpixels pour récupérer les pixels du rendu
    - au mieux, le rendu dans un FBO, si l'extension est supportée
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut
    Je pense pas avoir accès à des extensions sur la station sur laquelle je travaille.

    Donc je pense que j'utiliserais la méthode du readPixels. Comment on fait pour ça ? Faut-il afficher les objets normalement puis faire appel à la fonction ? Mais comment lui indique-t-on le point de vue d'où on souhaite voir la scène ?

  6. #6
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    bon alors j'aime bien aider mais je vais pas tout faire à ta place donc je vais te conseiller de :
    - commencer par chercher à quoi correspond ReadPixels
    - lire la doc de la fonction
    - tester une implémentation
    - revenir nous dire où tu rencontres des difficultés

    quand à indiquer le point de vue, comment dire... il s'agit de lire les pixels à l'écran donc..., aller chui sympa :
    - tu fais le rendu de ta scène (la sphere)
    - un coup de readpixels pour récupérer le rendu, tu peux compter le nombre de pixels
    - tu fais le rendu des autres objets qui occludent la sphere
    - tu refais un readpixels et recompte le nombre de pixels

    ps : penses aussi que le forum fonctionne sur une base de données et qu'il est très bien fait notamment avec une fonction Recherche
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut
    Ok, j'ai fait les recherches qu'il fallait, et j'ai réussi à avoir ce que je voulais :

    globalement ça donne à peu près ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // affichage de la scène
    /* ... */
     
    // comptage des pixels de la couleur qui m'intéresse
    const int H = 800;
    const int W = 800;
    const int nbPixels = 3 * H * W;
    int nbp = 0;
    unsigned char * pixels = new unsigned char[nbPixels];
    glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, pixels);
    for(int i = 0; i < nbPixels; i = i + 3)
    	if(pixels[i] == couleur.rouge() * 255 && pixels[i+1] == couleur.vert() * 255 && pixels[i+2] == couleur.bleu() * 255)	nbp++;
    return nbp;
    C'est pas très rapide, mais ce n'était pas ce que recherchais de toute façon...


    Merci beaucoup !!

  8. #8
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    glReadPixels est une horreur en terme de vitesse (si tu vises le temps réel) surtout si c'est pour un petit effet qui reste secondaire sur le rendu ?

    Ce que tu veux c'est probablement Occlusion query :
    Extension Occlusion query.

    Tu fais une requete une premiere fois avec la sphère sans z test (mais en désactivant l'écriture) et une fois avec Z test et tu fais la comparaison.

    Attention, les requêtes occlusion query et autres sont asynchrones, cela veut dire qu'il faut que tu trouves des trucs à faire entre l'envoi de la requête et son résultat (généralement dans un moteur ce ne sont pas les choses à faire qui manque, faut juste une petite architecture correcte pour tenir compte du parallélisme et de la latence).

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  9. #9
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    si tu as accès à l'extension concernant l'occlusion query
    http://www.opengl.org/registry/specs...sion_query.txt
    tu peux t'en servir, ça te facilitera le travail et c'est rapide
    Citation Envoyé par zarbiman Voir le message
    Je pense pas avoir accès à des extensions sur la station sur laquelle je travaille.
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  10. #10
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Quand on parle "d'extensions", c'est vraiment au sens large, celle là fait partie du core d'extensions intégrée par l'ARB (d'où son nom).

    De quelle genre de station s'agit-il ?

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  11. #11
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    ARB veut juste dire que l'extension a été validée, pas qu'elle a été intégrée à tous les drivers OpenGL
    cette extension fait partie des spécifications OpenGL 1.5

    certaines cartes capables d'utiliser l'extension HP dont est dérivée la version ARB ne supportent pas la version ARB car ils n'ont pas été mis à jour
    et tout le monde n'a pas accès à des cartes récentes non plus

    cela dit, ce serait tout de même intéressant de savoir sur quel matériel graphique zarbiman développe
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut
    Je développe une appli de réalité virtuelle sur une station de travail assez particulère dans un labo de recherche, c'est pas un matériel très commun, et je dois bien avouer que je connais pas les spécifications techniques...
    De toute façon pour l'instant, je ne cherche pas à faire du temps réel, mais juste à faire des calculs

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

Discussions similaires

  1. calculer la norme d'un point d'une sphère
    Par samplaid dans le forum OpenGL
    Réponses: 4
    Dernier message: 11/04/2009, 15h42
  2. [isosurface] Calcul de l'aire d'une surface
    Par kamelcompte dans le forum Images
    Réponses: 6
    Dernier message: 24/10/2008, 12h32
  3. Calcul de l'aire sous une courbe
    Par ramrouma dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/05/2007, 23h11
  4. Récupération de la valeur visible d'une Liste déroulante
    Par Yaz dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/10/2004, 12h01

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