- RollerCoaster [Algo] - Algo - Programmation
Marsh Posté le 29-08-2003 à 21:14:53
ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps.
c'est des montagne russe ??
Marsh Posté le 29-08-2003 à 21:16:23
je vois pas ce que tu evux faire
(avec tes splines j'entend)
(le reste arrive)
Marsh Posté le 29-08-2003 à 21:17:17
fFluFf a écrit : ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps. |
fini ce tps la, maintenant on privilegie l'optimisation memoire a l'optimisation d'instruction (meme si eviter de faire 25685 sqr c tjs ca de pris)
en l'occurence les tables de cos/sin, byebye
Marsh Posté le 29-08-2003 à 21:17:37
fFluFf a écrit : ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps. |
a oui ca je c. c clair que tu te tappe pas les calculs a chaque fois
le probleme c de determine les points r1 r2
en 2d c lequation dun cercle mais ici
fFluFf a écrit : |
oui
bon spa tres joli mais pour linstant ca sert plus de debug qu'autre chose
Marsh Posté le 29-08-2003 à 21:18:35
chrisbk a écrit : |
ca me rappelle les bon vieux plasma en mode 13h
Marsh Posté le 29-08-2003 à 21:24:09
sinon le rapport entre le dessins avec les courbes et lhistoire du cone , c pour permettre de tordre les rails (ce qui nest pas possible pour linstant , ce qui explique la courbe du looping qui est cassée...
Marsh Posté le 29-08-2003 à 21:28:33
ben a mon avis pour trouver r1 et r2 c'est complique a expliquer:
tu parle d'angle de rotation donc tu dois avoir une position par defaut (r0).
Si tu as r0 => simple rotation 3d (avec des matrices & co)
Si tu dois calculer r0:
tu cherche un vecteur perpendiculaire a p1-p2 et tu as ton r0 a la distance 2-r0
C'est vrai que c'est facil à dire(ecrire) désolé j'ai pas d'alcgo sous la main
Je cherche de mon coté ca m'interesse aussi
Marsh Posté le 29-08-2003 à 22:18:09
jviens ptet de trouver
en 2d on a
x=cos
y=sin
pourquoi ne pas implementer z avec aussi un cos(mais decale)
c ptet nimporte quoi ... je teste
EDIT : marche pas
Marsh Posté le 29-08-2003 à 22:40:23
il te manque une info.
effectivement il te faut un point de départ sur le cercle pour déterminer un angle !
L'idéal c'est qu'en plus du déplacement entre p1 et p2 tu aies aussi paramétré le changement d'orientation du systeme
(T,N) avec T, le vecteur tangent à la courbe de ton déplacement et N, un vecteur qui représenterait ton orientation. (il manque un vecteur à ta base mais il découle de T et de N, du moment que tu sais si tu es gaucher ou droitier ce qui déterminera dans quel sens tourneront r1 et r2 en fonction de ton angle Theta).
C'est pas aussi simple qu'en 2D mais en 3D il faut changer de systeme de pensée.
Attention à la façon dont tu parametres ta courbe de déplacement et à la gestion des points critiques (j'espere que si c'est un ride et que tu as des points critiques tu ne vas pas faire subir des accelerations infinies aux clients de tes montagnes russes ).
LeGreg
Marsh Posté le 29-08-2003 à 22:49:40
heu langle de depart je le connais c une donnnee
p1 et p2 sont connus aussi
p1 et p2 serait un peu comme deux pilliers du roller coaster
ett r1 et r2 lendroit par lequel passe les rails
r1 et r2 sont toujours oppose dun angle Pi (180degres donc) sinon les rails ne sont plus parralles ce qui pose un petit probleme
en donnant un angle, je pourrais faire pancher les rails
Marsh Posté le 29-08-2003 à 23:07:47
euh moi j'ai ptet un idée mais c'est un peu le bordel.. bon je tente kan meme
tu dois savoir ke tu pe tiré un vecteur orthogonal à 2 vecteurs coplanaires, suffit de faire un produit vectoriel. 2 vecteur coplanaire forme un angle ke tu pe retrouver avec un produit scalaire. Donc prenont les 2 points p1 et p2, on a le vectuer p1p2. apres tu fixe le point r1 de maniére a ce ke p1p2 soit orthogonal à p2r1. pour trouver r1 c'est simple : cos(90) = 0
donc on a p1p2*p2r1 = 0. ensuite si tu fais le produit vectoriel de p1p2 et p2r1 tu trouve le point r2 tel que p2r2 est orthogonal a p2r1 et a p1p2. Apres tu normalise les vecteurs p2r1 et p2r2 et tu aura les 2 vectuer directeur de l'unique plan auquel p1p2 est normal, et en plus p2r1 et p2r2 sont de meme norme et sont orthogonal, donc ca te fait un jolie petit repere orthonormal ou tu pe retrouvé un angle avec sinus cosinus les doigt dans le nez, apres t'a plus qu'a transformé les valeurs 2d de ton point en 3d, mais ca c'est facile alors j'explique po
Marsh Posté le 29-08-2003 à 23:15:54
merci
jvais regarder a tous ca
si jarrive a faire qqchose de bien un ptit update...
et qui sait une nouveau screen
Marsh Posté le 29-08-2003 à 23:21:37
jsuis entrain de travailler chez moi endessous de la lampe de bureau pour voir la projection des ombres dun crayon (donc la projection 2d)
jvous raconte pas le bordel
Marsh Posté le 29-08-2003 à 23:43:48
Peut-etre que je n'étais pas clair alors on va la refaire.
A ton point de départ (appelons le p0)
tu as l'orientation de ton rail défini par (T0,N0,B0).
Information que tu connais précisemment.
pour passer du point n au point n+1,
tu as besoin de plusieurs choses: le déplacement p(n+1) - p(n)
que tu obtiens en échantillonnant ta courbe paramétrée.
Et le changement de l'orientation de ton système (Tn, Nn, Bn).
Pour calculer Tn+1 c'est tres facile il s'agit de la tangente à ta courbe au point p(n+1). (si tu as du mal a calculer la tangente, fais moi signe). Le passage de Tn à Tn+1 constitue un premier changement d'orientation. Tu peux construire une matrice, un quaternion ou ce que tu veux pour passer de l'un à l'autre.
(si tu as de la misere pour construire la matrice de passage de Tn à Tn+1 fais moi signe).
Tu as aussi fait le choix d'avoir un deuxième changement d'orientation représenté par un angle Théta. Cet angle Théta tout seul ne veut pas dire grand chose, donc on va dire que ça représente un angle de rotation selon l'axe ORIENTÉ par Tn+1 (après que tu aies appliqué la première transformation donc.. le résultat ne sera évidemment pas le même si tu changes l'ordre d'application des transformations).
Cela constitue une deuxieme matrice de passage ou un deuxième quaternion. (si tu as de la misère à calculer cette deuxieme matrice de passage fait moi signe)
Pour obtenir la transformation globale de ton système (Tn,Nn,Bn) tu dois donc composer ces deux transformations dans le bon ordre.
Maintenant comment calculer la position des rails ?
C'est simple si r est ton rayon, le premier rail est en pn + r*Bn et le deuxieme est en pn - r*bn.
A+
LeGreg
Marsh Posté le 31-08-2003 à 00:37:21
ReplyMarsh Posté le 31-08-2003 à 16:57:36
ben heu si j'y suis arrive dans mon premier post jai editer et j'ai ajouter une video qui montre les points en rotation
enfait jai mit 4 points (en bleu) pour chaque section(en vert) les 4 points dune section seront relies au 4 points de la section suivante de facon a former un boite (pour apres ca)
pour l'instant jessaie doptimiser un peu le code et de transformer tout ces points en polygones , apres il faudra encore ajouter les formules de physique pour le deplacement du train
Marsh Posté le 01-09-2003 à 21:18:16
voir audessus c plus le meme probleme
sinon jefface celui ci et jen recree un nouveau
Marsh Posté le 01-09-2003 à 21:19:56
red faction a écrit : voir audessus c plus le meme probleme |
ah ok j'avais pas vu le changment
Marsh Posté le 02-09-2003 à 06:09:26
red faction a écrit : voir audessus c plus le meme probleme |
ben pourquoi tu ne suis pas mes conseils..
ca t'éviterait d'avoir de tels problemes..
LeGreg
Marsh Posté le 02-09-2003 à 10:29:22
on peu voir les formules ke tu utilise, moi me semble ton probleme vien d'un cosinus ke tu a mal interprété
Marsh Posté le 29-08-2003 à 21:05:19
EDIT :
Bon voila j'ai presque fini
Jarrive a tordre les rails now, et tout marche vraiment bien
le seul probleme persiste dans les looping(voir photo)pour calculer lorientation dun rail je calcule le vecteur perpendiculaire de deux points qui se suivent dans le trace
donc jai les 2 points p0 p1 (en vert)
je calcule le vecteur (en bleu):
la premiere photo est vue de cote, la deuxieme la meme boucle mais vu du dessus
on voit clairement qua mi-hauteur de la boucle il y a une inversion
j'ai volontairement retirer tout les elements pour quon voit bien le probleme
PS : je sais que je pourrais surdefinir loperateur = pour vertex blablabla mais je suis oblige de le faire en c (c pour une demo (4k) et la taille est tres importante)
j'ai pas change le systeme de coordonees, Y represente la hauteur...
Message édité par red faction le 01-09-2003 à 21:22:24