Son utilisation est la même qu'en C++ ou autre
ce qui fait qu'il est possible de trouver une tonne d'article sur le net.
Je ne suis pas un expert en API graphique, mais je vais vous partager mon expérience
afin d'afficher dans un premier temps un cube non texturé.
Ce cube possèdera des faces indépendantes des autres. C’est un peu le hello world de la 3D

1°) Les fichiers externes
Tout d'abord, vous devez avoir c'est deux fichiers dans votre répertoire de travail Opengl.pb et Windows.pb dispo à la fin du post.
Opengl.pb : ce fichier fait interface entre opengl & purebasic
Windows.pb : ce fichier va vous permettre de créer un écran opengl, de l'effacer, le détruire,etc...
ps : Windows.pb peut être améliorer par les connaisseurs en api Windows pour la gestion de la fenêtre.
2°) Création de l'écran opengl
C'est aussi simple qu'une commande PB standard
CreateScreen("OpenGL",800,600,32,#False)
il n'y a pas besoin d'explication sauf pour le flag de fin
#False = mode fenêtrer
#True = Faux plein écran

une fois notre écran créer, nous devons initialiser différent éléments d'openGL
3°) L’initialisation
Code : Tout sélectionner
glMatrixMode_( #GL_PROJECTION )
glLoadIdentity_()
gluPerspective_(70,1.33,1,1000)
glEnable_(#GL_DEPTH_TEST)
glMatrixMode_() Permet de choisir la matrice sur lequel nous allons projeter notre scene. (Plus d’infos sur google ^^)
glLoadIdentity_() Charge la matrice identité
Voici à quoi ressemble la matrice identité, c’est en fait une sorte de tableau 4x4 qui est beaucoup utilisé en 3D
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Mais OpenGL nous facilite la vie, il possède des fonctions qui nous permettent d’éviter de faire du calcul matriciel, et par la même occasion, on ne s’arrache pas les cheveux

Si vous voulez plus d’infos sur les matrices : http://www.mandragor.org/tutoriels/3d/13#ancre1
gluPerspective_(70,1.33,1,1000)
-Le premier paramètre et en fait le FOV
-Le second est le ratio, le ratio est généralement de 1.33, pour calculer le ratio, c’est simple : Largeur écran / Hauteur écran
640/480 = 1.33
800/600 = 1.33
1024/768 = 1.33
-Le troisième paramètre quand à lui permet en sorte de cliping, ou si vous préférer la limite longue du rendu de la camera.
glEnable_(#GL_DEPTH_TEST)
Cette commande couplée avec cette constante nous permet de cacher les faces non visibles.
Voilà pour l’initialisation, rien de compliqué ?
4°) La boucle principale
Comme toute boucle principale d’un programme, elle comporte un
Repeat & until avec une condition de sortie.
Comme nous n’avons pas d’écran fait par purebasic, nous n’avons donc pas pu initialiser le clavier.
C’est pas grave, le fichier Windows.pb nous donne une alternative :
Code : Tout sélectionner
Repeat
Until Keys(#VK_ESCAPE)
End
Toujours le même problème, nous allons avoir besoin d’un clearscreen() et d’un flipbuffers()
, le fichier Windows.pb nous donne encore une alternative :
Code : Tout sélectionner
Repeat
Event.l = ScreenEvent()
; Dessin
FlipAndClear()
Until Keys(#VK_ESCAPE)
DestroyScreen()
End

Passons au plus intéressant, le dessin du cube en lui-même.
5°) La fonction Dessin()
Procedure Dessiner()
glClear_( #GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT ) ; Efface les buffers spécifier en paramètres
glMatrixMode_( #GL_MODELVIEW ) ;Tout à l’heure nous avons déjà fait appel à cette commande, là, nous preparons la matrice de notre futur objet.
glLoadIdentity_(); on charge la matrice identité
gluLookAt_(5,5,6,0,0,0,0,1,0); les 3 premiers paramètres servent à définir la position de la caméra (x,y,z) , les trois suivant le point visé, les trois autres définissent l'axe verticale de la camera
ref : http://www.linuxgraphic.org/section3d/o ... idac1.html
glRotated_(45,0,0,1); cette commande permet une rotation, ici de 45° sur l’axe Z de notre objet, ou plutôt matrice (#GL_MODELVIEW), bref, ne vous prenez pas la tête avec les matrices

il est possible de mettre une valeur ailleurs que dans Z par exemple :
glRotated_(45,0.05,0.9,0.0005)
je vais vous expliquer juste pour une face, le reste est dans le code finale.
glBegin_(#GL_QUADS) ; Nous allons demander de créer un Quads (4 Vertex) pour définir une face, il y a d’autres méthodes , mais je ne vais pas épiloguer la dessus.
glVertex3d_(1,1,1); on est pas obligé d’utiliser des 1 on peut mettre des 100,250,etc...
glVertex3d_(1,1,-1);Les 4 Vertex définissent une face
glVertex3d_(-1,1,-1);
glVertex3d_(-1,1,1);
glEnd_(); intervient après un glbegin()
glFlush_() ; Vide les Buffers utilisé précédemment
EndProcedure
6°) Code finale
Voici le liens des includes :
File:1->Tut-OpenGL.rar

Merci DJES !

Code : Tout sélectionner
IncludeFile "OpenGl.Pb"
IncludeFile "Windows.pb"
Declare Dessiner()
CreateScreen("OpenGL",800,600,32,#False)
glMatrixMode_( #GL_PROJECTION )
glLoadIdentity_()
gluPerspective_(70,1.33,1,500)
glEnable_(#GL_DEPTH_TEST)
Repeat
Event.l = ScreenEvent()
Dessiner()
FlipAndClear()
Until Keys(#VK_ESCAPE)
DestroyScreen()
End
Procedure Dessiner()
Static angle.f
angle + 0.8
glClear_( #GL_COLOR_BUFFER_BIT )
glMatrixMode_( #GL_MODELVIEW )
glLoadIdentity_( )
gluLookAt_(5,0,0,0,0,0,0,1,0)
glRotated_(angle,0.5,0.1,1)
glBegin_(#GL_QUADS)
glColor3ub_(255,0,0)
glVertex3d_(1,1,1)
glVertex3d_(1,1,-1)
glVertex3d_(-1,1,-1)
glVertex3d_(-1,1,1)
glColor3ub_(0,255,0)
glVertex3d_(1,-1,1)
glVertex3d_(1,-1,-1)
glVertex3d_(1,1,-1)
glVertex3d_(1,1,1)
glColor3ub_(0,0,255)
glVertex3d_(-1,-1,1)
glVertex3d_(-1,-1,-1)
glVertex3d_(1,-1,-1)
glVertex3d_(1,-1,1)
glColor3ub_(255,255,0)
glVertex3d_(-1,1,1)
glVertex3d_(-1,1,-1)
glVertex3d_(-1,-1,-1)
glVertex3d_(-1,-1,1)
glColor3ub_(0,255,255)
glVertex3d_(1,1,-1)
glVertex3d_(1,-1,-1)
glVertex3d_(-1,-1,-1)
glVertex3d_(-1,1,-1)
glColor3ub_(255,0,255)
glVertex3d_(1,-1,1)
glVertex3d_(1,1,1)
glVertex3d_(-1,1,1)
glVertex3d_(-1,-1,1)
glEnd_()
glFlush_()
EndProcedure
Ps: si vous maitriser les api Windows, ca serais cool de modifier windows.pb afin d'avoir une gestion complète de la fenetre, comme les déplacement, ou la reduction de la fenetre, avec la gestion d'un vrai plein écran
