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 2004j'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).
des maths
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
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



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.