TUTO Un simple cube animé avec OpenGl

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

TUTO Un simple cube animé avec OpenGl

Message par microdevweb »

Bonjour à tous,

Je ne suis pas un spécialiste en OpenGl, mais je m'y intéresse actuellement, voici un petit tutoriel pour faire une Cube animé et avec cette fois ci une vue 3D (j'ai trouvé ce tutoriel sur le net pour le C++ et je l'ai adapté, il n'est pas de moi à l'origine)

Image

Code : Tout sélectionner

EnableExplicit
;-*Variables---------------------------------------------------------------------------------------------------
Global angleX,angleZ
;}--------------------------------------------------------------------------------------------------------------
Procedure OpenMainForm()
      OpenWindow(0,0,0,640,480,"Sample Cube")
      OpenGLGadget(0,0,0,640,480,#PB_OpenGL_Keyboard)
EndProcedure
Procedure InitOpenGl()
      ;       Le Z-Buffer est un tampon (buffer) qui stocke la profondeur (d'où le Z, X et Y sur l'écran étant la position en pixel) de chaque pixel affiché à l'écran.
      ;       Ensuite quand OpenGL demande à dessiner un pixel à un endroit, il compare la profondeur du point à afficher 
      ;       et celle présente dans le buffer. Si le nouveau pixel est situé devant l'ancien, 
      ;       alors il est dessiné et la valeur de la profondeur dans le buffer est mise à jour. Sinon, 
      ;       le pixel était alors situé derrière et n'a donc pas lieu d'être affiché.
      glEnable_(#GL_DEPTH_TEST);Activer le Z-Buffer
      glMatrixMode_(#GL_PROJECTION)
      glLoadIdentity_()
      ;Perspective en 4/3
      gluPerspective_(70,640/480,1,1000)
EndProcedure
Procedure DessineCube()
      ;#GL_DEPTH_BUFFER_BIT  pour le Z-Buffer
      glClear_(#GL_COLOR_BUFFER_BIT|#GL_DEPTH_BUFFER_BIT)
      glMatrixMode_(#GL_MODELVIEW)
      glLoadIdentity_()
      ;Positionement de la camera virtuel
      gluLookAt_(3,4,2,0,0,0,0,0,1)
      ;Une rotation sur Z et sur X pour une animation
      glRotated_(angleZ,0,0,1)
      glRotated_(angleX,1,0,0)
      glBegin_(#GL_QUADS) ;Pour dessiner les faces
      ;-*La Face rouge------------------------------------------------------------------------------------------
      glColor3ub_(255,0,0)
      ;Les 4 vertex de la face
      glVertex3d_(1,1,1)
      glVertex3d_(1,1,-1)
      glVertex3d_(-1,1,-1)
      glVertex3d_(-1,1,1)
      ;}-------------------------------------------------------------------------------------------------------------
       ;-*La Face Verte------------------------------------------------------------------------------------------
      glColor3ub_(0,255,0)
      ;Les 4 vertex de la face
      glVertex3d_(1,-1,1)
      glVertex3d_(1,-1,-1)
      glVertex3d_(1,1,-1)
      glVertex3d_(1,1,1)
      ;}-------------------------------------------------------------------------------------------------------------
       ;-*La Face Bleu------------------------------------------------------------------------------------------
      glColor3ub_(0,0,255)
      ;Les 4 vertex de la face
      glVertex3d_(-1,-1,1)
      glVertex3d_(-1,-1,-1)
      glVertex3d_(1,-1,-1)
      glVertex3d_(1,-1,1)
      ;}-------------------------------------------------------------------------------------------------------------
      ;-*La Face Jaune------------------------------------------------------------------------------------------
      glColor3ub_(255,255,0)
      ;Les 4 vertex de la face
      glVertex3d_(-1,1,1)
      glVertex3d_(-1,1,-1)
      glVertex3d_(-1,-1,-1)
      glVertex3d_(-1,-1,1)
      ;}-------------------------------------------------------------------------------------------------------------
      ;-*La Face Cyan------------------------------------------------------------------------------------------
      glColor3ub_(0,255,255)
      ;Les 4 vertex de la face
      glVertex3d_(1,1,-1)
      glVertex3d_(1,-1,-1)
      glVertex3d_(-1,-1,-1)
      glVertex3d_(-1,1,-1)
      ;}-------------------------------------------------------------------------------------------------------------
      ;-*La Face majenta------------------------------------------------------------------------------------------
      glColor3ub_(255,0,255)
      ;Les 4 vertex de la face
      glVertex3d_(1,-1,1)
      glVertex3d_(1,1,1)
      glVertex3d_(-1,1,1)
      glVertex3d_(-1,-1,1)
      ;}-------------------------------------------------------------------------------------------------------------
      glEnd_()
      glFlush_()
      SetGadgetAttribute(0, #PB_OpenGL_FlipBuffers, #True)  ;Interchange les buffers
EndProcedure
Global Event
OpenMainForm()
InitOpenGl()
Repeat
      Event=WindowEvent()
      Delay(10)
      angleX+1
      angleZ+1
      DessineCube()
Until Event=#PB_Event_CloseWindow
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège