Retourner aux forums || Retourner au forum Programmation.c

Programmation.c : une sphère en opengl ...

Posté par Cyprien Le Pannérer (Jabber id, page perso, ) le 29 septembre 2004
0
J'ai un problème a la con : j'arrive pas a dessiner une sphère en openGL !

j'ai un cours d'intro a synthèse d'image et je dois créer une série de figures et volumes en opengl : c'est a dire en utilisant seulement

glBegin(GL_..);
...
glvertex3f...;
...
glEnd();

j'ai fais très vite les autres volumes et figures mais pas moyen de faire cette putain de sphère !

je n'arrive pas a exprimer mes points [x,y,z] en fonctions de alpha,béta (angle en radians et r (rayon).
mes souvenir de math sont trop loins :(

j'arrive a x = sin(alpha) ; z = sin(beta) mais y = ???

j'ai loupé un truc mais je ne sais pas le quel

note prog.c était peut etre pas le bon forum :s

> Lire le message (5 commentaires, moyenne: 2,4).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

des maths

Posté par @ () le 29/09/2004 à 12:49. (lien). Évalué à 5.

essaye avec:

x = r * sin (theta) * cos (phi)
y = r * sin (theta) * cos (phi)
z = r * cos (theta)

et fais varier theta entre -90° et 90° et phi entre 0 et 360°

  • [^]Re: des maths

    Posté par Cyprien Le Pannérer (Jabber id, page perso, ) le 29/09/2004 à 16:40. (lien). Évalué à 1.

    j'ai du loupé quelque chose car avec le code suivant tout mes points sont dans le même plan :(



    glBegin(GL_POINTS);

    for(teta=-M_PI;teta<M_PI;teta+=inc)
    {
    for(phi=0.;phi<(2*M_PI);phi+=inc)
    {
    glVertex3f(sin(teta)*cos(phi),sin(teta)*cos(phi),cos(teta));
    }
    }
    glEnd();

    • [^]Re: des maths

      Posté par Antoine Büsch () le 29/09/2004 à 17:36. (lien). Évalué à 2.

      Ben oui, dans le plan x=y meme... Il y a surement une coquille dans la formule du monsieur au dessus, mais mes souvenirs de math sont un peu trop poussiereux pour corriger...

      • [^]Re: des maths

        Posté par Antoine Büsch () le 29/09/2004 à 17:45. (lien). Évalué à 1.

        Je me réponds à moi-même, mais après 2 minutes de reflexion (et un petit croquis), je pense qu'il faut changer la première ou la deuxième ligne (au choix) en r*sin(theta)*sin(phi)

la soluce avec des gl_quads

Posté par @ () le 29/09/2004 à 17:45. (lien). Évalué à 3.

j'ai du faire une erreur dans les naths mais la c'est sur que ça marche

void Sphere(int a,int b) { 
float da = ( M_PI / a ); 
float db = ( 2.0f * M_PI / b ); 
glBegin(GL_QUADS); 
glColor3f(1.0,0.0,0.0);
glNormal3f(0,0,1); 
for( int i = 0; i < a + 1 ; i++ ) { 
 float r0 = sin ( i * da ); 
 float y0 = cos ( i * da ); 
 float r1 = sin ( (i+1) * da ); 
 float y1 = cos ( (i+1) * da ); 

 for( int j = 0; j < b + 1 ; j++ ) { 
  float x0 = r0 * sin( j * db ); 
  float z0 = r0 * cos( j * db ); 
  float x1 = r0 * sin( (j+1) * db ); 
  float z1 = r0 * cos( (j+1) * db ); 

  float x2 = r1 * sin( j * db ); 
  float z2 = r1 * cos( j * db ); 
  float x3 = r1 * sin( (j+1) * db ); 
  float z3 = r1 * cos( (j+1) * db ); 

  glColor3f((x0+x1+x2+x3)/4.0,(y0+y1)/2.0,(z0+z1+z2+z3)/4.0);

  glVertex3f(x0,y0,z0); 
  glVertex3f(x1,y0,z1); 
  glVertex3f(x3,y1,z3); 
  glVertex3f(x2,y1,z2); 
 } 
} 
glEnd();  
}

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c