
MorphingStars - Le même pour ceux qui connaissent
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
elle permet de calculer la position des sprites , #nb étant le nombre de sprites à afficher.
Object=2 correspond à une forme , il y en a 18 .
Ici c'est la Sphere .
Si tu vas sur le site http://www.mathcurve.com/surfaces/sphere/sphere.shtml
tu verras que pour une sphere
x=R*CosU*CosV
y=R*SinU*CosV
z=R*SinV
Avec -Pi<=U<=Pi et -Pi/2<=V<=Pi/2
Ici R=100, Xd correspond à V
xd = -90 + Random(180)
si Random=0 alors xd = -90 (-Pi/2)
Si Random=180 alors xd = 90 (Pi/2)
et
Et les tableaux permettent d'enregistrer les positions des sprites
points1(t) = x0
points2(t) = y0
points3(t) = z0
Et donc si tu veux faire un ballon de rugby tu peux écrire
Object=2 correspond à une forme , il y en a 18 .
Ici c'est la Sphere .
Si tu vas sur le site http://www.mathcurve.com/surfaces/sphere/sphere.shtml
tu verras que pour une sphere
x=R*CosU*CosV
y=R*SinU*CosV
z=R*SinV
Avec -Pi<=U<=Pi et -Pi/2<=V<=Pi/2
Ici R=100, Xd correspond à V
xd = -90 + Random(180)
si Random=0 alors xd = -90 (-Pi/2)
Si Random=180 alors xd = 90 (Pi/2)
et
pourrait s'écrirex0 = (Cosd(xd) * 10) * (Cosd(t*360/#nb) * 10)
tu retrouves bien R=100x0 = 100 * Cosd(t*360/#nb) * Cosd(xd)
Et les tableaux permettent d'enregistrer les positions des sprites
points1(t) = x0
points2(t) = y0
points3(t) = z0
Code : Tout sélectionner
If object=2
For t=1 To #nb
xd = -90 + Random(180)
x0 = (Cosd(xd) * 10) * (Cosd(t*360/#nb) * 10)
y0 = (Cosd(xd) * 10) * (Sind(t*360/#nb) * 10)
z0 = Sind(xd) * 100
points1(t) = x0
points2(t) = y0
points3(t) = z0
Next t
EndIf
Code : Tout sélectionner
x0 = 50 * Cosd(xd) * Cosd(t*360/#nb)
y0 = 50 * Cosd(xd) * Sind(t*360/#nb)
z0 = Sind(xd) * 100
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
Et si tu veux une répartition plus régulière des sprites , tu peux faire un truc de ce genre ( avec #nb=360)
tu peux modifier l'objet 2 pour voir ce que ça donne .
la répartition pourrait être mieux faite encore ,je vais y réfléchir .
J'en aurai besoin de toute façon , puisque je voulais le faire pour une matrice et me faire des primitives calculées (mesh).
tu peux modifier l'objet 2 pour voir ce que ça donne .
la répartition pourrait être mieux faite encore ,je vais y réfléchir .
J'en aurai besoin de toute façon , puisque je voulais le faire pour une matrice et me faire des primitives calculées (mesh).
Code : Tout sélectionner
If object=2
;For t=1 To #nb
For v=-90 To 90 Step 15
For u=-180 To 180 Step 15
t + 1
Debug t
xd = -90 + Random(180)
x0 = (Cosd(v) * 10) * (Cosd(u) * 10)
y0 = (Cosd(v) * 10) * (Sind(u) * 10)
z0 = Sind(v) * 100
points1(t) = x0
points2(t) = y0
points3(t) = z0
Next u
Next v
;Next t
EndIf
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
autre question souvent dans les surfaces on trouve des constantes b ou a comme ici http://www.mathcurve.com/surfaces/tromp ... riel.shtml
que représentent elles ? comment adapter ?
C'est comme Ch ca représente quoi ? car les formules ne seraient pas compliquées à comprendre si ces quelques détails étaient expliqués.
Bon a et b ce sont des constantes, rien de compliqué, mais ch c quoi ca ?
Vu la quiche que je suis en math, je ne suis pas sorti de l'auberge
que représentent elles ? comment adapter ?
C'est comme Ch ca représente quoi ? car les formules ne seraient pas compliquées à comprendre si ces quelques détails étaient expliqués.
Bon a et b ce sont des constantes, rien de compliqué, mais ch c quoi ca ?
Vu la quiche que je suis en math, je ne suis pas sorti de l'auberge
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
les tableaux tpoints te permettent de gérer le morphing
la position finale des sprites est stockée dans points1() etc ...
pour chaque sprite on teste la position finale avec tpoint
on incrémente tpoint s'il est inférieur à point
on décrémente tpoint s'il est supérieur à point
ça se passe ici
#nb c'est le nombre de sprites .
et donc à chaque tour de programme , on réajuste progressivement les sprites pour les placer dans la bonne position (celle qui a été calculée et stockée dans points1()....)
on le fait pendant 375 tours de programme , tu peux modifier la valeur de cnt pour mieux comprendre ,si tu mets une petite valeur , tu verras que les figures n'ont pas le temps de se reconstituer .
la position finale des sprites est stockée dans points1() etc ...
pour chaque sprite on teste la position finale avec tpoint
on incrémente tpoint s'il est inférieur à point
on décrémente tpoint s'il est supérieur à point
ça se passe ici
#nb c'est le nombre de sprites .
Code : Tout sélectionner
For t=1 To #nb
If points1(t) > tpoint1(t) : tpoint1(t) + 1 : EndIf
If points1(t) < tpoint1(t) : tpoint1(t) - 1 : EndIf
If points2(t) > tpoint2(t) : tpoint2(t) + 1 : EndIf
If points2(t) < tpoint2(t) : tpoint2(t) - 1 : EndIf
If points3(t) > tpoint3(t) : tpoint3(t) + 1 : EndIf
If points3(t) < tpoint3(t) : tpoint3(t) - 1 : EndIf
Next t
on le fait pendant 375 tours de programme , tu peux modifier la valeur de cnt pour mieux comprendre ,si tu mets une petite valeur , tu verras que les figures n'ont pas le temps de se reconstituer .
Code : Tout sélectionner
If cnt>375 ; quand on estime que le morphing est terminé
;on incrémente l'effet courant
curobj + 1
If curobj > numobjs : curobj = 1 : EndIf
object(curobj)
cnt=0
EndIf
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
une fois que j'aurais tout pigé, me permet tu d'utiliser cette routine pour mes programmes ?
sinon je commence à comprendre comment ca marche, mais ceci :
C'est ce qui permet la rotation ? ke ca se fait lol
sinon je commence à comprendre comment ca marche, mais ceci :
Code : Tout sélectionner
For t=1 To #nb
x3d.f = tpoint1(t)
y3d.f = tpoint2(t)
z3d.f = tpoint3(t)
ty.f = (y3d * Cosd(vx)) - (z3d * Sind(vx))
tz.f = (y3d * Sind(vx)) + (z3d * Cosd(vx))
tx.f = (x3d * Cosd(vy)) - (tz * Sind(vy))
tz.f = (x3d * Sind(vy)) + (tz * Cosd(vy))
ox.f = tx
tx = (tx * Cosd(vz)) - (ty * Sind(vz))
ty = (ox * Sind(vz)) + (ty * Cosd(vz))
nx = (512*tx) / (d - tz) + 320
ny = 240 - (512 * ty) / (d - tz)
DisplayTransparentSprite(No,Int(nx),Int(ny))
Next t
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
oui mais pour faire des petites demomaking, c super intéressant 
Et pour ce code, tu peux m'expliquer un peu ? (je commence à capter comment ca marche héhé mais ca par contre j'ai du mal)
Peut on m'expliquer ce que sont que Ch et Th ici
http://www.mathcurve.com/surfaces/pseud ... here.shtml

Et pour ce code, tu peux m'expliquer un peu ? (je commence à capter comment ca marche héhé mais ca par contre j'ai du mal)
Peut on m'expliquer ce que sont que Ch et Th ici
http://www.mathcurve.com/surfaces/pseud ... here.shtml
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
c'est pour calculé les coordonnées dans le plan 2D (l'écran) des points du repère 3D xyz en rotation.C'est ce qui permet la rotation ? ke ca se fait lol
en fait, on fait 3 rotation, une par axe.
le mieux serait de faire un schéma pour expliquer :
donc voici

donc on a un point P de coordonné a,b et c (sur les z donc pas visible sur le schéma)
on fait tourner le repère d'un angle E sur l'axe Z pour passer du point P' vers le point P (on tourne toujours dans le sens trigo)
on obtient les coordonnées du point P comme ça (un peu de trigo

P x = a * cos(E) - b * sin(E)
P y = a * sin(E) + b * cos(E)
P z = c
on repète l'opération pour les rotations sur les x et les y et on obtient les coordonnées du point P sur l'écran en partant du point P du repère 3D en rotation
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]