Page 1 sur 1

OpenGL : Dessiner une lune

Publié : ven. 04/déc./2020 15:49
par falsam
Suite à une demande de SPH, cette procédure permet de dessiner une lune pleine ou un croissant de lune.

DrawMoon(x.f, y.f, Width.f, Height.f, Fullness.f = 1, Color.i = $FFFFFFFF, Angle.f = 0)

x, y Position de la lune

Width, Height. Largeur et hauteur de la lune.

Fullness : Rondeur de la lune.
Par défaut 1 la lune est pleine
-0.99 Le croissant de lune est très fin.
-0.95 Le croissant de lune est un peu moins fin
etc ...

Color : Couleur à utiliser au format RGBA
Par défaut la couleur utilisé est blanche.

Angle : Rotation de la lune.

■ Code exemple.

Code : Tout sélectionner

EnableExplicit

Global Scene, ww = 800, wh = 600

; Summary
Declare Start()
Declare Render()
Declare DrawMoon(x.f, y.f, Width.f, Height.f, Fullness.f = 1, Color.i = $FFFFFFFF, Angle.f = 0)
Declare Exit()

Start()

Procedure Start()  
  OpenWindow(#PB_Any, 0, 0, ww, wh, "OpenGL : Draw Moon", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ; OpenGL drawing context 
  Scene = OpenGLGadget(#PB_Any, 0, 0, ww, wh, #PB_OpenGL_NoDepthBuffer)
  
  ; Properties of the camera
  glMatrixMode_(#GL_PROJECTION)
  glOrtho_(0, ww, wh, 0, -1, 1)
  
  ; Background color
  ; Each RGBA component is divided by 255
  glClearColor_(0, 0, 112/255, 1.0) 
    
  ; Opacity
  glEnable_(#GL_BLEND)
  glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA)

  ; Events  
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  ; Render Loop
  Render()
EndProcedure

; Render
Procedure Render()  
  Repeat
    WindowEvent()
    
    ; ClearScreen
    glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
        
    ; Draw moon
    DrawMoon(600, 150, 100, 100, -0.90, RGBA(255, 255, 212, 255))
    
    ; FlipBuffers
    SetGadgetAttribute(Scene, #PB_OpenGL_FlipBuffers, #True)
  ForEver
EndProcedure

; Draw Moon
Procedure DrawMoon(x.f, y.f, Width.f, Height.f, Fullness.f = 1, Color.i = $FFFFFFFF, Angle.f = 0)
  Protected Finesse.f = 0.1
  Protected n.f = Finesse 
  
  Protected SinAngle.f
  Protected CosAngle.f
  
  Protected x0.f
  Protected y0.f
  
  glMatrixMode_(#GL_MODELVIEW)    
  glPushMatrix_();   
  
  ; Location
  glTranslatef_(x, y, 0)
  
  ; Rotate
  glRotatef_(Angle, 0, 0, 1)
  
  ; Draw Moon
  glBegin_(#GL_QUAD_STRIP)
  glColor4f_(Red(Color)/255, Green(Color)/255, Blue(Color)/255, Alpha(Color)/255)
  
  While n < #PI 
    SinAngle.f = Sin(n)
    CosAngle.f = Cos(n)
    
    x0 = (Width * SinAngle) 
    y0 = (Height * CosAngle) 
    
    glVertex2f_(x0, y0);
    glVertex2f_(-Fullness * x0, y0)
    n + Finesse
  Wend    
  glEnd_()
  
  glPopMatrix_()
EndProcedure

Procedure Exit()  
  End
EndProcedure

Re: OpenGL : Dessiner une lune

Publié : ven. 04/déc./2020 18:53
par Kwai chang caine
Marche niquel :wink:
Pourquoi tu l'as mis dans débutant et pas dans les combines ? 8O
En tout cas....merci de nous avoir montré ta lune :mrgreen: et son code évidemment 8)

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 21:39
par Ar-S
Kwai chang caine a écrit :Marche niquel :wink:
Pourquoi tu l'as mis dans débutant et pas dans les combines ? 8O
En tout cas....merci de nous avoir montré ta lune :mrgreen: et son code évidemment 8)
Probablement parce que ce n'est pas une combine :D

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 21:45
par falsam
Ar-S a écrit :Probablement parce que ce n'est pas une combine
Ouiiiiiiiii

En plus SPH m'a dit sur Discord qu'il ne comprenait pas le code.
SPH Sur Discord a écrit : j'ai pas trouvé où on regle la taille du croissant

HA

Publié : sam. 05/déc./2020 22:11
par SPH

Code : Tout sélectionner

Declare DrawMoon(x.f, y.f, Width.f, Height.f, Fullness.f = 1, Color.i = $FFFFFFFF, Angle.f = 0)
Mal foutu. Il faut modifier a 2 endroits differents la variable "Fullness.f"
Et qu'on mette 1 ou 0.1, ca ne change rien :idea:
HAHAAA

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 22:32
par falsam
SPH a écrit :Il faut modifier a 2 endroits differents la variable "Fullness.f"
Heu 8O ou à deux endroit ?
SPH a écrit :Et qu'on mette 1 ou 0.1, ca ne change rien
Haaaaaa ce mec est dingo 8O

Je t'invite à tester

Code : Tout sélectionner

DrawMoon(600, 150, 100, 100, -0.5, RGBA(255, 255, 212, 255))
puis

Code : Tout sélectionner

DrawMoon(600, 150, 100, 100, -0.90, RGBA(255, 255, 212, 255))
et si tu veux inverser le croissant il te suffit d'effectuer une rotation à 180

Code : Tout sélectionner

DrawMoon(600, 150, 100, 100, -0.5, RGBA(255, 255, 212, 255), 180)

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 22:36
par SPH
Fullness : Rondeur de la lune.
Par défaut 1 la lune est pleine
As-tu deja vu une pleine lune :?: :|

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 22:38
par falsam
Ok je renonce SPH

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 22:56
par SPH
Je comprend tout : je modifiais la ligne 8 et la ligne 55

Et toi, tu parlais de la ligne 47 :idea:

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 23:02
par falsam
La je pleure carrément ....... de rire .... MouahhHHHHhhhhhhhhhh :mrgreen:
SPH a écrit :Je comprend tout : je modifiais la ligne 8 et la ligne 55
NON
SPH a écrit :Et toi, tu parlais de la ligne 47
Je confirme

Rassure moi tu sais ce que c'est qu'une procédure ?

Re: OpenGL : Dessiner une lune

Publié : sam. 05/déc./2020 23:17
par SPH
J'en ri aussi : c'est plus de ma faute que de la tienne ! :mrgreen: :lol:

Une procéquoi ? :wink:

On va se moquer de moi pendant 100 millions d'années... :idea: