OpenGL : Dessiner une lune

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

OpenGL : Dessiner une lune

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: OpenGL : Dessiner une lune

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: OpenGL : Dessiner une lune

Message 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
~~~~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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OpenGL : Dessiner une lune

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

HA

Message 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
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OpenGL : Dessiner une lune

Message 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)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: OpenGL : Dessiner une lune

Message par SPH »

Fullness : Rondeur de la lune.
Par défaut 1 la lune est pleine
As-tu deja vu une pleine lune :?: :|
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OpenGL : Dessiner une lune

Message par falsam »

Ok je renonce SPH
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: OpenGL : Dessiner une lune

Message par SPH »

Je comprend tout : je modifiais la ligne 8 et la ligne 55

Et toi, tu parlais de la ligne 47 :idea:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: OpenGL : Dessiner une lune

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: OpenGL : Dessiner une lune

Message 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:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Répondre