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 :

Objets de base (cube, triangles, polygones etc)


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut Objets de base (cube, triangles, polygones etc)
    Bonjour,
    pour mon petit moteur 3D, je voudrais créer des formes de base (cube, polygones, sphere ...) indépendantes de l'API (OGL, OGLES, D3D). Le rendu selon chaque API sera fait plus tard. Je me demande ce dont j'aurai besoin à part les points définissant la forme.

    Par exemple pour un cube, est-ce que je peux modèliser le cube par ses 8 points ou bien 2 suffisent (ceux d'une diagonale) parce qu'il me parait juste de n'avoir qu'une diagonale pour déterminer le reste mais je ne m'en sors pas.

    Ensuite, je me demandais si les normales doivent etre stockées ou pas.

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    c'est à toi de décider ce que tu veux avoir comme informations dans tes objets et de trouver un compromis entre simplicité et précision.

    Pour un cube, plutôt que 2 points je n'en utiliserais qu'un seul, le centre, associé au rayon du cube. à partir de là tu peux calculer tes 8 sommets (fait le une fois à la création, pas à chaque frame).
    Pour les normales, elles ne "doivent" pas être stockées, mais ca sera effectivement plus rapide de les calculer une fois et de les stocker que de le refaire à chaque frame.

    Sinon, tu peux ajouter à tes objets
    - une couleur (ou un materiau, si tu utilises l'éclairage)
    - une texture
    - une display list: pour des petits objets comme un cube ca n'apporte rien mais si tu as de plus gros trucs à afficher.... Bon j'ai vu que maintenant on utilise plutôt les vertex buffer objects que les display list..mais vu que je n'ai pas encore franchi le pas.....

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    merci,
    pour le cube, si j'utilise le centre + le rayon, je calcule mes autres relativement au centre, non ? cela implique quoi pour le rendu ?

    Si j'ai une fonction render_OGLES() qui produit le rendu en se servant de l'API openGL ES, dans mon prog, je crée un objet Cube avec comme paramètres le centre et le rayon. Puis je calcule les autres pts que je stock où ?

    merci

  4. #4
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    OK, pour faire simple, t'as une classe qui ressemble à ca
    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
     
    struct Point3D
    {
      float x, y, z;
    };
     
    class GLCube
    {
       Point3D m_centre;
       float m_rayon;
     
       Point3D m_sommets[8];
     
       GLCube(float rayon, Point3D centre);
      ~GLCube();
    };
    dans ton constructeur, tu mets à jour les 8 sommets:
    m_sommets[0] = (m_centre.x - rayon, m_centre.y - rayon, m_centre.z - rayon)
    m_sommets[1] = (m_centre.x + rayon, m_centre.y - rayon, m_centre.z - rayon)
    m_sommets[2] = (m_centre.x - rayon, m_centre.y - rayon, m_centre.z + rayon)
    , etc (NOTE: c'est pas du code là....)

    Un alternative est de créer un cube unité (diagonale (-1,-1,-1) => (1,1,1) )
    et d'utiliser glScalef pour fixer la taille et glTranslatef pour déplacer le centre. L'avantage est que tu n'as plus de sommets à stocker, mais je crois que glScale est assez lourd pour les performances (à confirmer svp)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    j'ai voulu réagir avant de lire ton post ... lol

    Pour le reste, j'avais bien compris .

    Merci

  6. #6
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Bonjour,
    Pour ma part, je n'aurais pas mis de centre. La longueur d'une arête est suffisante pour calculer les coordonnées locales du cube. Ensuite une matrice permet de situer (/orienter) le cube dans le monde (/caméra).

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    oui je suis d'accord.

    Sinon, je suis passé au cone et là, j'ai quelques problemes. Notamment, glut permet d'en créer un et pour cela, il faut donner une hauteur, une base (jusque là no problem) mais aussi un nombre de slices et un nombre de stacks. Que signifient ces deux parametres ?

    merci

  8. #8
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Imagine une sphère, slices te donne le nombre de divisions "verticales" (les fuseaux horaires sur un globe par exemple, la longitude quoi), stacks le nombre de divisons "horizontales" (latitude).

    pour une sphere, essaie par exemple avec stacks = slices = 32
    Pour un cylindre, seul le nombre de slices est important pour avoir une belle forme (enfin, il te faut quand meme au moins stacks = 1), tu peux toujours rajouter des stacks mais ca n'apportera rien à la précision de ta géométrie.

    essaie de jouer avec les paramètres en affichant ta scène en wireframe, ca sera facile à comprendre comme ca

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    merci

  10. #10
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    En effet pour le cylindre le nombre de parallèles n'ajoute aucune précision concernant la géométrie. En revanche l'effet sur l'illumination (modèle gouraud) peut être important...

  11. #11
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Effectivement je n'avais pas pensé à ca, c'est utile si tu effectues les calculs d'éclairage par vertex, ce que fait OpenGL par défaut.

    si en revanche tu utilises les shaders pour faire de l'éclairage par pixel, pas de problème

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/09/2007, 18h29
  2. Transformer Objets en Base de données
    Par vain_mich dans le forum JDBC
    Réponses: 2
    Dernier message: 14/05/2007, 10h27
  3. Objet de base d'une classe derivée
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 03/05/2007, 14h39
  4. Objet en base
    Par Mercenary Developer dans le forum JDBC
    Réponses: 2
    Dernier message: 11/04/2006, 13h34
  5. Fractale à base de triangles
    Par ixterm dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/03/2005, 11h14

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