Page 2 sur 3
Re: TransformSprite3D : explication concrète demandée
Publié : jeu. 02/sept./2010 15:24
par flaith
djes a écrit :Un truc vite fait à partir de vieux sources (sinon le mieux pour les exemples c la lib supersprite3d de cpl, j'en ai une copie)
j'avoue que cette lib m'intéresserais aussi

Re: TransformSprite3D : explication concrète demandée
Publié : jeu. 02/sept./2010 15:32
par djes
Je la posterai ce soir ou demain soir
Re: TransformSprite3D : explication concrète demandée
Publié : jeu. 02/sept./2010 18:56
par flaith

thank you sir

Re: TransformSprite3D : explication concrète demandée
Publié : jeu. 02/sept./2010 19:48
par Ar-S
djes a écrit :Je la posterai ce soir ou demain soir
Je la récupèrerai aussi

Re: TransformSprite3D : explication concrète demandée
Publié : jeu. 02/sept./2010 22:18
par djes
Re: TransformSprite3D : explication concrète demandée
Publié : ven. 03/sept./2010 14:29
par Ar-S

Djes

Re: TransformSprite3D : explication concrète demandée
Publié : sam. 04/sept./2010 16:00
par Ollivier
@TazNormand
Ne t'ai point demandé de dessiner un rond? !!!
Code : Tout sélectionner
; Une application de base de la trigonométrie : Dessiner un rond
; (µSoft)
OpenWindow(0, 0, 0, 400, 300, "", $CF0001)
RondRayon.F = 100.0
RondPositionX.F = 200
RondPositionY.F = 150
Repeat
StartDrawing(WindowOutput(0) )
For AngleEnDegraes = 0 To 359
AngleEnRadians.F = AngleEnDegraes * 2.0 * #PI / 360.0
x.F = RondPositionX + Cos(AngleEnRadians) * RondRayon
y.F = RondPositionY + Sin(AngleEnRadians) * RondRayon
Plot(x, y, 0)
Next
StopDrawing()
Until WaitWindowEvent() = 16
CloseWindow(0)
Re: TransformSprite3D : explication concrète demandée
Publié : sam. 04/sept./2010 19:22
par djes
Les degrés, pouah! Je modifie (n'y vois pas de mal Ollivier!) et j'ajoute un cercle par racines carrées.
Code : Tout sélectionner
; Une application de base de la trigonométrie : Dessiner un rond
; (µSoft)
OpenWindow(0, 0, 0, 400, 300, "", $CF0001)
StartDrawing(WindowOutput(0) )
x.f = 0
rayon.f = 100
x_centre.f = 120
y_centre.f = 150
Repeat
y.f = Sqr(rayon * rayon - x * x)
Plot(x_centre + x, y_centre + y, 0)
Plot(x_centre + x, y_centre - y, 0)
Plot(x_centre - x, y_centre + y, 0)
Plot(x_centre - x, y_centre - y, 0)
x + 1
Until x = rayon
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x_centre.f = 220
angle.f = 0
perimetre_cercle_rayon1.f = 2 * #PI
perimetre_notre_cerle.f = 2 * #PI * rayon
pas.f = perimetre_cercle_rayon1 / perimetre_notre_cerle
Repeat
Plot(x_centre + rayon * Cos(angle), y_centre + rayon * Sin(angle), RGB($FF, 0, 0))
angle + pas
Until angle >= perimetre_cercle_rayon1 ;>= au lieu d'= car les flottants manquent toujours de précision
StopDrawing()
Repeat
Until WaitWindowEvent() = 16
CloseWindow(0)
Re: TransformSprite3D : explication concrète demandée
Publié : sam. 04/sept./2010 23:48
par Ollivier
Djes a écrit :Les degrés, pouah! Je modifie (n'y vois pas de mal Ollivier!)
Si tu divises un cercle en un peu plus de 23000 arcs d'angle égal et que tu en fais ta mesure de référence (le «degré perso»

), tu peux te permettre d'avoir des calculs trigo 25% plus rapides que les calculs paramétriques. Alors le mal, je ne le vois: tu fais ce que tu veux!
Alors, en effet, on peut améliorer les perfs et étoffer au paramétrique. Mais on se rend très vite compte que le trigonométrique a le dessus sur le paramétrique dans l'aspect applicatif.
Ce qui donne deux codes:
Le code de base
Code : Tout sélectionner
; 1.1. Une application de base de la trigonométrie :
; Dessiner un rond avec la fonction Cosinus()
; et sa fonction quadratique Sinus()
; (µSoft)
; Auteurs : Ollivier / Djes
OpenWindow(0, 0, 0, 400, 300, "", $CF0001)
RondRayon.F = 100.0
RondPositionX.F = 200
RondPositionY.F = 150
RondPasDeLAngle.F = 1 / RondRayon
RondCirconference = 2 * RondRayon * #PI
Repeat
StartDrawing(WindowOutput(0) )
For I = 0 To RondCirconference
x.F = RondPositionX + Cos(AngleEnRadians.F) * RondRayon
y.F = RondPositionY + Sin(AngleEnRadians.F) * RondRayon
Plot(x, y, 0)
AngleEnRadians + RondPasDeLAngle
Next
StopDrawing()
Until WaitWindowEvent() = 16
CloseWindow(0)
Le code du rebelle de la trigo
Code : Tout sélectionner
; 1.2. Une application de base de la trigonométrie :
; Dessiner un rond par une application paramétrique
; du théorème de Pythagore,
; et en déterminer l'analogie trigonométrique
; (µSoft)
; Auteurs : Ollivier / Djes
OpenWindow(0, 0, 0, 400, 300, "", $CF0001)
RondRayon.F = 100.0
RondPositionX.F = 200
RondPositionY.F = 150
Repeat
StartDrawing(WindowOutput(0) )
For I = 0 - RondRayon To 0 + RondRayon
X.F = I
If Random(1) ; Un coup de pifomètre, car...
Y.F = Sqr(RondRayon * RondRayon - X * X) ; Ceci égale...
Else
Y.F = Sin(ACos(X / RondRayon) ) * RondRayon ; ...cela!
EndIf
Plot(RondPositionX + X, RondPositionY - Y, 0)
Plot(RondPositionX + X, RondPositionY + Y, 0)
Next
StopDrawing()
Until WaitWindowEvent() = 16
CloseWindow(0)
Mais je conseille aux débutants de comprendre puis d'apprendre par coeur le tout premier code que j'ai posté plus haut... C'est une étape de base que j'ai effectué il y a 21 ans (l'interpréteur EXELBASIC+ ne possédait pas de commande pour dessiner un cercle), après, chacun fait ce qu'il veut...
Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 7:42
par G-Rom
@Djes , elle fonctionne toujours la "lib" SuperSprite3D ?
Faut il l'adapté à directx 9 ? si sa marche , je l'adapte à Linux , avec de nouveau exemples.
Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 10:47
par djes
Ollivier> J'adore

J'espère que tu as gardé ton Exel... C'est vrai que c'est un algo de base, et vu qu'on apprend la trigo à l'école avec des degrés, c'est plus simple à comprendre. A part ça, je ne cherchais pas à faire de la vitesse
G-Rom> Oui, ça fonctionne sans aucun problème! Je ne sais pas si c'était la dernière version, ça remonte à ... 2006!!!!!!
Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 11:49
par Ollivier
Djes a écrit :Ollivier> J'adore J'espère que tu as gardé ton Exel...
Je n'ai plus tout cet ancien matériel d'une marque bouffée par µsoft.
Djes a écrit :A part ça, je ne cherchais pas à faire de la vitesse
A priori, moi non plus puisque je fais le dessin sur une fenêtre... Mais l'algo trigo, lui est optimisé, presque prêt à utiliser des tables au lieu des fonctions et user de l'écran et les "joies" de DirectX.
Voici un autre exemple qui part de cette base pour visualiser une rotation simple:
C'est toujours le même noyau:
xF = xI + Cos(angle) * Rayon
yF = yI + Sin(angle) * Rayon (si on veut être rigoureux, c'est le signe - devant Sin() )
Et là, on commence à voir les coulisses de l'utilisation de TransformSprite3D().
Code : Tout sélectionner
; 2. Application trigonométrique d'une rotation
; (µSoft)
; Auteurs : Ollivier
Global RondRayon.F = 100.0
Global RondPositionX.F = 200
Global RondPositionY.F = 150
Global RondPasDeLAngle.F = 1 / RondRayon
Global RondCirconference = 2 * RondRayon * #PI
Global AngleL1.F = #PI / 4.0
Global RayonL1.F = RondRayon
Global AngleL2.F = 3.0 * #PI / 4.0
Global RayonL2.F = RondRayon
Global AngleL12.F
Procedure DrawCircle()
StartDrawing(WindowOutput(0) )
Box(0, 40, 400, 260, #White)
For I = 0 To RondCirconference
x.F = RondPositionX + Cos(AngleEnRadians.F) * RondRayon
y.F = RondPositionY + Sin(AngleEnRadians.F) * RondRayon
Plot(x, y, 0)
AngleEnRadians + RondPasDeLAngle
Next
Lx1 = RondPositionX + Cos(AngleL1 + AngleL12) * RayonL1
Ly1 = RondPositionY + Sin(AngleL1 + AngleL12) * RayonL1
Lx2 = RondPositionX + Cos(AngleL2 + AngleL12) * RayonL2
Ly2 = RondPositionY + Sin(AngleL2 + AngleL12) * RayonL2
LineXY(Lx1, Ly1, Lx2, Ly2, 0)
StopDrawing()
EndProcedure
OpenWindow(0, 0, 0, 400, 300, "", $CF0001)
ScrollBarGadget(0, 10, 10, 324, 16, 0, 628, 20)
Repeat
AngleL12 = GetGadgetState(0) / 100.
DrawCircle()
Until WaitWindowEvent() = 16
CloseWindow(0)
Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 14:23
par Ar-S
Je viens de tester en PB 4.50 ça marche bien (en activant OpenGL dans les options de compilation sinon écran noir), par contr, ni a t il aucun fichier d'aide de dispo ?
Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 17:17
par G-Rom
non , mais je vais mettre tout ca au gout du jour avec une doc.
donc pas maintenant

Re: TransformSprite3D : explication concrète demandée
Publié : dim. 05/sept./2010 18:27
par Ar-S
ah ok, alors je vais m'acheter deux sachets de patience
Merci d'avance
