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)
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