Dessiner un camembert en 3D
Publié : mer. 28/avr./2004 13:39
Salut,
j'ai fait un code qui permet de dessiner un camembert en 3D
j'ai utilisé la fonction de l'API Pie_() qui permet de dessiner un camembert en 2D et j'ai bidouillé pour donner un effet de 3D
j'ai fait un code qui permet de dessiner un camembert en 3D
j'ai utilisé la fonction de l'API Pie_() qui permet de dessiner un camembert en 2D et j'ai bidouillé pour donner un effet de 3D
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Dessiner un camembert en 3D
Procedure Pie3D(HDC.l, X.l, Y.l, Rayon.l, Orientation.f, Hauteur.l, AngleDepart.f, AngleFin.f, Couleur.l)
; HDC : Handle du dessin
; X, Y : centre du camembert
; Rayon : Rayon du camembert
; Orientation : Orientation du camembert qui donne l'effet 3D. cette valeur doit être comprise entre 0 et 1
; Hauteur : Hauteur ou épaisseur du camembert
; AngleDepart : Angle de départ en radian
; AngleFin : Angle de fin en radian
; Couleur : Couleur du camenbert
Protected R.l, G.l, B.l, n.l, AX1.l, AY1.l, AX2.l, AY2.l, Rayon2.l
Rayon2 = Rayon * Orientation ; calul du rayon sur l'axe Y du camembert
Y = Y - Hauteur / 2 ; on recentre le camemenbert en fonction de l'épaisseur
R = Red(Couleur) : G = Green(Couleur) : B = Blue(Couleur) ; On décompose la couleur en RGB
AX2 = Int(X + 100 * Cos(AngleDepart)) ; calcul du point d'arriver
AY2 = Int(Y + 100 * Sin(AngleDepart) * Orientation)
AX1 = Int(X + 100 * Cos(AngleFin)) ; calcul du point de départ
AY1 = Int(Y + 100 * Sin(AngleFin) * Orientation)
For n = Hauteur To 1 Step -1 ; On dessine l'épaisseur du camembert
FrontColor(R * (0.8 - 0.08 * n / Hauteur), G * (0.8 - 0.08 * n / Hauteur), B * (0.8 - 0.08 * n / Hauteur)) ; Choix de la couleur du bord du camembert
Pie_(HDC, X - Rayon, Y - Rayon2 + n, X + Rayon, Y + Rayon2 + n, AX1, AY1 + n, AX2, AY2 + n)
Next
FrontColor(R, G, B)
Pie_(HDC, X - Rayon, Y - Rayon2, X + Rayon, Y + Rayon2, AX1, AY1, AX2, AY2) ; on dessine le dessus du camembert
EndProcedure
; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
HDC = StartDrawing(WindowOutput())
Pie3D(HDC, 150, 150, 120, 0.45, 20, 3 * #Pi / 4, 0 , RGB(100, 200, 100))
StopDrawing()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End