[OGL] où c'est qu'on calcule?

peon.master

Membre actif
22 Avril 2002
144
5
42
Vernayaz
Hello!

dans le cadre d'un programme cocoa objC utilisant OpenGL, plus précisément dans la NSView, je ne sais pas ou il serais optimal de placer l'appel à la méthode de calcul.

Je m'explique: cette méthode, (void)calcule, a pour effet de placer dans un tableau les points qui vont former le dessin. (ce programme, c'est un economiseur d'écran)

voila les possibilités:

début de drawRect:
- place possible 1 pour [self calcule];
* dessin dans le buffer
- place possible 2 pour [self calcule];
* swap des deux buffers
- place possible 3 pour [self calcule];
fin de drawRect.

L'idéal serait que le programme calcule PENDANT que la carte graphique affiche...
 
Ok, je vais voir... merci.

sinon, pour les matheux un autre truc:

j'ai deux points (A,B) dans l'espace.
J'aimerais dessiner un cercle dont le centre est un des deux points.
ce cercle devrait etre perpendiculaire à l'autre point.
(le but: faire un tuyau a partir d'une courbe dans l'espace)

bon, je connais l'équation du plan dont le vecteur AB est le vecteur normal, mais comment sortir les points qui sont sur ce plan ET a égale distance du centre?
(bon, normalement je devrais savoir ca, mais...)

au fait, il faudrait le code d'une méthode du genre:
POINT pointDUnCercleOriente(POINT A, POINT B, float rayon, float angle)
{
...
}

POINT étant un truc du genre:
struct
{
float x,y,z;
}POINT;

essayez l'économiseur d'écran "1904.saver" sur mon site:
http://home.urbanet.ch/urba17767/
Mac os X -> developpement et c'est le dernier tout en bas. Dites- moi ce que vous en pensez!
basé sur openGL, il utilise dans les 15 % du proc sur mon ti (667), 20 % max quand il y a une transition
 
Vachement bien ton économiseur d'écran !!
smile.gif


pour tes points sur le plan :

si A est sur le plan et B le centre du cercle tangent au plan (ça va j'ai compris là ??
grin.gif
), on a MA.MB=cste (c'est une ligne de niveau, MA MB vecteurs) pour M décrivant les points à égale distance de B qui sont dans le plan.(M vérifie donc aussi l'équation du plan)

Je sais pas si ça peut t'aider..
cool.gif
grin.gif
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Posté à l'origine par maousse:
si A est sur le plan et B le centre du cercle tangent au plan <HR></BLOCKQUOTE>

au fait, A est sur le plan ET est également le centre du cercle; car le cercle est dans le plan. (comme un cerceau posé à plat sur le sol).

B est le point qui fait que le vecteur AB est le vecteur normal du plan (un bâton posé verticalement au centre du cerceau)

C1, C2 ... Cn; sont les points formant le cercle.

AB.AC = 0 (==&gt;perpendiculaire)
|AC| = r

J'ai deux équations pour une inconnue ==&gt; ca donnera une variable libre... et cette variable libre aura qqch a voir avec l'angle j'imagine... mais comment résoudre???

tu veux voir la source de l'économiseur? C'est mon premier prog avec openGL alors c'est peut-être pas vraiment optimal.. je la met dans quelques minutes à côté du prog.
 
J'ai bien trop la flemme pour te répondre intelligemment mais quand même une ou deux petites idées pour te soutenir moralement, en espérant que, vu la fatique du vendredi soir, je ne dis pas que des conneries.

(Accessoirement, sur MacGé, le mélange entre le bar et maintenant les maths, c'est un éclectisme qui me va très bien).

Pour tes équations, tu as 3 inconnues : les coordonnées du point B dans l'espace. Tes deux équations (algébriques) te donnent bien une variable libre (mais pas parce que tu as une inconnue, sinon tu serais mal !!!).

Si tu développes en x,y,z, t'auras des choses. Maintenant, j'aurais plutôt tendance à faire un changement de repère pour aligner le nouvel axe z sur ton bâton
grin.gif
. Comme ça, le cercle est dans un plan z = 0. Si tu fais ton changement de repère pour avoir l'origine en A, tu te simplifies encore la vie.

En résumé, fais du changement de repère, c'est assez simple et standard et tu te ramènes à un pb dans le plan beaucoup plus simple.

Maintenant, je n'ai jamais pris l'apéro avec OpenGL mais je suis tout ébaubi qu'on ne puisse pas faire des cercles dans l'espace simplement avec.

Pour terminer, il y a un gars qui a fait un site avec des graphes java/opengl superbes. Il me reste à retrouver l'adresse
grin.gif
 
merci Luc!

Au fait je pensais a une seule inconnue car j'ai écrit l'équation en nommant les vecteurs/points et pas les nombres x,y,z... mais tu as raison, c'est:

1) a1*b1 + a2*b2 + a3*b3 = 0
2) racine de ((a1-c1)^2+(a2-c2)^2+(a3-c3)^2) = r

==&gt; 2 équations et 3 inconnue (c1,c2,c3)

Pour changer l'axe de coordonnées, c'est une très bonne idée (oui, car j'y avait pensé aussi !) mais, même problème: comment qu'on fait ??

voila, la source est dispo a coté de du prog...

j'attend toujours si qqn a une idée pour créer un cercle orienté librement dans l'espace

a++
 
tu as un équation encore, non ?

c1*x+c2*y+c3*z=cste, C appartient au plan.

en fait je sais pas si ça apporte quelquechose, j'arrive plus à réfléchir à cette heure-là...
grin.gif


Pour info, j'ai récupéré tes sources pour 1904 et je les ai compilées, j'obtiens à peu près 20% de charge processeur sur un ibook G3 600 (ça monte à 40 et descend à 10 suivant la phase de tracé..). Comment t'es-tu documenté pour openGL ? Tu me donnes envie de m'y mettre à faire des anims aussi jolies...
smile.gif


Pour quoi n'envoies-tu pas ton screensaver à versiontracker ?

Bon allez, bonne nuit
wink.gif
 
J'ai retrouvé (par hasard
grin.gif
) le site dont je te parlais plus haut (graphes 3d sous java/opengle) :
http://perso.wanadoo.fr/chavaignes/Cafe/java.html

C'est assez rigolo.

PS. J'ai pas regardé tes sources
confused.gif
, trop feignant pour l'instant, mais à l'occasion...

[04 juin 2002 : message édité par Luc G]
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Posté à l'origine par maousse:
tu as un équation encore, non ?

c1*x+c2*y+c3*z=cste, C appartient au plan.
<HR></BLOCKQUOTE>

Je ne vois pas très bien a quoi correspond cette equation.

Je pourrais également avoir un semblant de résultat en projetant les cercles des axes XY,XZ et YZ sur le plan voulu
.. mais comment faire... en plus ca me donnera des ellipses je pense.

Pour Luc G: j'ai été voir le site, il y a des superbes applets Java sur les math... ca a l'air assez bien fait !

a++
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Posté à l'origine par peon.master:

début de drawRect:
- place possible 1 pour [self calcule];
* dessin dans le buffer
- place possible 2 pour [self calcule];
* swap des deux buffers
- place possible 3 pour [self calcule];
fin de drawRect.

L'idéal serait que le programme calcule PENDANT que la carte graphique affiche...
<HR></BLOCKQUOTE>

Dans main() classique tu passe par :

----
InitGL(); //initialisation

glutDisplayFunc(DrawGLScene); //affichage de la scene
glutReshapeFunc(ReSizeGLScene); // pour le resize de la fenetre
glutIdleFunc(Idle); // calculs entre chaque frame

glutMainLoop(); // hop, on boucle...
----

et c'est dans ta fonction Idle(void) que tu fais tes calcules qui seront executé à chaque boucle du programme. Après c'est OpenGL qui optimise le passage d'informations (très probable).

Bonne chance
wink.gif