TransformSprite3D : explication concrète demandée

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: TransformSprite3D : explication concrète demandée

Message 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 :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: TransformSprite3D : explication concrète demandée

Message par djes »

Je la posterai ce soir ou demain soir
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: TransformSprite3D : explication concrète demandée

Message par flaith »

Image thank you sir :D
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: TransformSprite3D : explication concrète demandée

Message par Ar-S »

djes a écrit :Je la posterai ce soir ou demain soir
Je la récupèrerai aussi :D
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: TransformSprite3D : explication concrète demandée

Message par djes »

Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: TransformSprite3D : explication concrète demandée

Message par Ar-S »

Image Djes Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TransformSprite3D : explication concrète demandée

Message 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)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: TransformSprite3D : explication concrète demandée

Message 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)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TransformSprite3D : explication concrète demandée

Message 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» :D), 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...
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: TransformSprite3D : explication concrète demandée

Message 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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: TransformSprite3D : explication concrète demandée

Message 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!!!!!!
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TransformSprite3D : explication concrète demandée

Message 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)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: TransformSprite3D : explication concrète demandée

Message 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 ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: TransformSprite3D : explication concrète demandée

Message par G-Rom »

non , mais je vais mettre tout ca au gout du jour avec une doc.
donc pas maintenant :D
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: TransformSprite3D : explication concrète demandée

Message par Ar-S »

ah ok, alors je vais m'acheter deux sachets de patience :mrgreen:
Merci d'avance Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre