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 :

Dessin cercle avec openGL-Glut


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut Dessin cercle avec openGL-Glut
    j'aimerai bien savoir la méthode pour dessiner une cercle où an arc avec openGL,pour cela j'ai ces paramètres d'entrés : point d'origine (X,Y), le rayon l'angle de départ et l'angle d'arrivé.

    si quelqu'un connu comment faire ça en C, Merci de m'aider.

    Merci en 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 : 40
    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
    Il n'y a rien de prémaché pour faire ce genre de choses. Le plus simple sera sans doute de disposer d'une texture préfabriquée avec une image de cercle, puis d'afficher celle-ci via un carré dont les dimensions et la position auront été ajustées pour coller aux paramètres du cercle.

    EDIT : j'avais loupé l'angle de départ et l'angle d'arrivée. Là ça devient plus chaud... peut-être en dessinant X triangles très fins disposés autour du centre du cercle ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    au sinon tu peut faire une sphere avec "glutSolidSphere()".

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    merci pous vos réponses

    sinon il y'a pas d'autres solutions

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    je ne sais pas s'il existe de fonction pour dessiner un arc mais pour infos/rappel les équations de rotation vectorielle 2d :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x' = x cos(a) - y sin(a)
    y' = x sin(a) - y cos(a)
    A priori les étapes seraient :
    - calcul de x et y avec les sin et cos inverses de l'angle de départ
    - définition du "pas" de l'angle (plus il sera petit, plus l'arc sera arrondi)
    - tu boucles en résolvant les équations de rotation et tu stockes tes points dans une structure quelconque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    float initialA
    float finalA
    float x
    float y
    vector points
    Tant que initialA < finalA
    x = x cos(initialA) - y sin(initialA)
    y = x sin(initialA) + y cos(initialA)
    points.ajoute(x, y)
    initialA += step
    Fin tant que
    - tu boucles sur ta structure en appelant tes fonctions opengl de dessin

    L'intérêt des 2 boucles c'est évidemment de ne pas à avoir à rfaire les calculs à chaque fois mais si c'est juste pour affichage tu peux dessiner directement.
    Sans oublier de retranslater le tout aux coordonnées d'origine, les équations fonctionnent dans le cercle trigonométrique.

  6. #6
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Sinon il existe peut être un moyen de dessiner un cercle à l'aide de ta bibliothèque de fenêtrage.
    Si c'est glut ce n'est pas le cas, mais il me semble qu'avec SDL c'est possible.
    Si tu dois juste dessiner quelques primitives 2D, il n'est peut être pas nécessaire de passer par OpenGL.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Plusieurs methodes a mon avis:

    -dessiner un screen aligned quad. et pour chaque point du quad, verifier que le point est dans ta surface (fragment shader). Selon le cas, utiliser une operation de kill ou jouer sur un alpha blending astucieux (methode qui modifiera le z buffer meme si le pixel n est pas affiche))

    -discretiser le cercle avec triangle_fan . Afin de pouvoir faire du LOD je creerais un vertex buffer de taille assez grande (1024 semble largement assez). Le vertex buffer serai initialise avec des entier de 0 .. 1023. et le vertex shader utiliserais une formule type :

    r * cos(vertex.value * alpha_step + alpha_offset)
    r * sin (vertex.value * alpha_step + alpha_offset)

    alpha_step et alpha_offset devenant des uniforms pour un vertex shader bien choisi. Pour le LOD resterait a choisir le nombre d elemenent a afficher , et changer alpha_step correctement). Note : attention au premier vertex = centre du cercle

    - utiliser un geometry shader , mais la sa sort du domaine de mes connaissances actuelles (jusqu a ce que je gagne au loto de quoi changer de GPU)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    autre idee : utiliser glutSolidSphere avec une projection ortho. Pour retirer le secteur qui t interresse, utiliser le stencil buffer avece un triangle partant de l origine du cercle

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Merci pour vos questions,

    j'ai trouvé la soultion, voila ( Cercle 2D autour de rayon r avec x et y représentent l'origine) et angd et angf( représente l'angle de départ et
    final càd on peut m^me dessiner un arc

    vectorY1=y + r;
    vectorX1=x;

    glBegin(GL_LINE_STRIP);

    for(angle=angd;angle<=angf;angle+=0.01f)
    {
    vectorX=x+(r*(float)sin((double)angle));
    vectorY=y+(r*(float)cos((double)angle));
    glVertex2d(vectorX1,vectorY1);
    vectorY1=vectorY;
    vectorX1=vectorX;
    }
    glEnd();

  10. #10
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    En fait il y a une primitive qui pourrait t'intéresser dans glu : gluPartialDisk(...).

    C'est un quadric que tu peux dessiner en mode GLU_LINE avec gluQuadricDrawStyle(...).

    Ainsi tu obtiendras exactement ce que tu cherches : un morceau d'arc de cercle.

Discussions similaires

  1. pas d'affichage avec opengl glut
    Par mar1985 dans le forum OpenGL
    Réponses: 1
    Dernier message: 25/03/2014, 08h45
  2. Réponses: 3
    Dernier message: 19/05/2009, 15h32
  3. Dessiner des objets plus complexes avec OpenGL
    Par Premium dans le forum OpenGL
    Réponses: 18
    Dernier message: 21/11/2006, 17h55
  4. Problème de profondeur avec OpenGL et GLUT
    Par brotelle dans le forum GLUT
    Réponses: 3
    Dernier message: 12/03/2006, 14h47
  5. Configurer OpenGL/Glut avec C++Bluider
    Par MiGoN dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/09/2002, 23h18

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