Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
898 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] Les cercles, pourquoi ca marche pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] Les cercles, pourquoi ca marche pas

n°634997
WhatDe
Posté le 08-02-2004 à 10:25:15  profilanswer
 

Hello tout le monde,
 
Bon je suis plutot Java mais j'avais envie d'essayer de jouer un peu avec OpenGL et je pige pas pourquoi il vaut mieux utiliser les sin et cos pour utiliser un cercle (j'ai quelques lacunes en math  :whistle: ), et que la formule (x-j)^2 + (y-k)^2 = r^2 me dessine plutot une élipse. Voilà le code qui m'embete:  
 
Faites pas attention à la propreté du code  ;)  
 
(Pour dessiner une sphere qui décrit un cercle)

Code :
  1. float CircleGetY(float x, float radius)
  2. {
  3. return radius - x*x;
  4. }
  5. GLvoid DrawPoint(GLvoid)
  6. {
  7. if(i < -0.990f && i > -1.010f)
  8. {
  9.  increment = true;
  10.  decrement = false;
  11. }
  12. if(i > 0.990f && i < 1.010f)
  13. {
  14.  increment = false;
  15.  decrement = true;
  16. }
  17. if(decrement)
  18.  i -= 0.1f;
  19. else
  20.  i += 0.1f;
  21. glTranslatef(i, decrement?CircleGetY(i, 1.0f):-1*CircleGetY(i, 1.0f), -3.0f);
  22. Draw();
  23. }
  24. GLvoid Draw(GLvoid)
  25. {
  26. GLUquadricObj *q;
  27. q = gluNewQuadric();
  28. gluSphere(q, 0.01f, 32, 16);
  29. }


 
(juste pour tracer un cercle, récupéré sur gamedev)

Code :
  1. const float TWOPI = 6.283185;
  2. void DrawCircle(float radius, int slices)
  3. {
  4.   float step = TWOPI/slices;
  5.   glBegin(GL_LINE_LOOP);
  6.   for(float angle = 0.0f; angle < TWOPI; angle+=step)
  7.     glVertex2f(cos(angle) * radius, sin(angle) * radius);
  8.   glEnd();
  9. }


 
Donc le 1er code me donne une trajectoire élliptique avec des angles assez visibles à gauche et à droite, et le deuxième me donne un cercle parfait.
 
Pourquoi ?  :heink:  
 
Merci  :jap:


Message édité par WhatDe le 08-02-2004 à 10:26:18
mood
Publicité
Posté le 08-02-2004 à 10:25:15  profilanswer
 

n°634999
tahitiroug​e
Posté le 08-02-2004 à 10:30:01  profilanswer
 

j'y connais rien en programmation, mais ce ne serait pas parce que les pixels ne sont pas carrés ? -> tu calcules par les coordonnées, t'as pas un cercle.
 
vous moquez pas si c'est une grosse connerie svp  :p   :whistle:


Message édité par tahitirouge le 08-02-2004 à 10:30:26
n°635039
skelter
Posté le 08-02-2004 à 13:05:20  profilanswer
 

gluSphere ==> oui, mais le reste, tu cherche a faire quoi?

n°635042
youdontcar​e
Posté le 08-02-2004 à 13:13:13  profilanswer
 

WhatDe a écrit :

glTranslatef(i, decrement?CircleGetY(i, 1.0f):-1*CircleGetY(i, 1.0f), -3.0f);

Donc tu parcours x, et calcules y en conséquence.
 
x² + y² = r²
 
donc
 
y = racine(r²-x²)
 
Mais ta méthode est crade. x² + y² = qq chose définit un bout du plan : le cercle, le disque, etc. C'est approprié si tu veux colorer pour chaque pixel de l'écran tous ceux qui sont dans un disque. Si tu veux tracer un cercle, le paramétrique (ta 2ème équation) est la plus appropriée : en fonction d'un paramètre, obtention d'un point de la courbe.

n°635149
WhatDe
Posté le 08-02-2004 à 16:12:57  profilanswer
 

youdontcare a écrit :

Donc tu parcours x, et calcules y en conséquence.
 
x² + y² = r²
 
donc
 
y = racine(r²-x²)
 
Mais ta méthode est crade. x² + y² = qq chose définit un bout du plan : le cercle, le disque, etc. C'est approprié si tu veux colorer pour chaque pixel de l'écran tous ceux qui sont dans un disque. Si tu veux tracer un cercle, le paramétrique (ta 2ème équation) est la plus appropriée : en fonction d'un paramètre, obtention d'un point de la courbe.


Merci  :jap:

n°635168
youdontcar​e
Posté le 08-02-2004 à 16:34:46  profilanswer
 

tahitirouge a écrit :

j'y connais rien en programmation, mais ce ne serait pas parce que les pixels ne sont pas carrés ? -> tu calcules par les coordonnées, t'as pas un cercle.

C'est le cas avec certains modes comme le 320x200 (aspect ratio de 1.6, affiché sur un écran 4/3 -> déformation). Comme il disait qu'il obtenait un cercle parfait avec la seconde méthode, ça venait de la première méthode, pas de l'écran.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] Les cercles, pourquoi ca marche pas

 

Sujets relatifs
Installation d'une lib supplémentaire (OpenGL)HeightMap et openGL
OPENGL pb de remanence...Monde infini en openGL
[Opengl mais pas seulement] Pb du au Filtrage des textures[access]changer la propriété du controle d'un sous état (marche po)
performances openglPB OPENGL et mon application WIN32
qui veut aider un debutant en php ; mon compteur marche pas[C++] Classe Thread (ca marche)
Plus de sujets relatifs à : [OpenGL] Les cercles, pourquoi ca marche pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR