Tutoriel: Introduction à OpenGL sur QT
Pour developper mon moteur 3D sur mon mmo j'aurai besoin de faire de l'openGL (enfin on verra quand j'en aurai fini avec l'apprentissage de celui ci).
J'ai donc commencer à ressembler quelques tutoriaux et voulu compiler tout ça en qt: pas facile aussi ai je décidé de vous donner la marche à suivre.
Pour commencer il vous faut qt et un projet vide (voir le site du zero pour ça).
Ensuite c'est assez facile.
1- Dans le fichier.pro il faut rajouter la ligne: QT+=opengl
2- Créez un fchier main.cpp avec le code suivant:
#include
#include
#include"GLWidget.h"
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
GLWidgetwindow;
window.resize(800,600);
window.show();
returnapp.exec();
}
3- Ajouter la classe GLWidget puis dans le .h:
#ifndefGLWIDGET_H
#defineGLWIDGET_H
#include
classGLWidget:publicQGLWidget{
Q_OBJECT//mustincludethisifyouuseQtsignals/slots
public:
GLWidget(QWidget*parent=NULL);
protected:
voidinitializeGL();
voidresizeGL(intw,inth);
voidpaintGL();
voidmousePressEvent(QMouseEvent*event);
voidmouseMoveEvent(QMouseEvent*event);
voidkeyPressEvent(QKeyEvent*event);
};
#endif//GLWIDGET_H
4- Puis le code source glwidet.cpp
#include
#include"glwidget.h"
#include"stdio.h"
GLWidget::GLWidget(QWidget*parent):QGLWidget(parent){
setMouseTracking(true);
}
voidGLWidget::initializeGL(){
glShadeModel(GL_SMOOTH);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_COLOR_MATERIAL);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0,0,0,0);
}
voidGLWidget::resizeGL(intw,inth){
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
voidGLWidget::paintGL(){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
}
voidGLWidget::mousePressEvent(QMouseEvent*event){
}
voidGLWidget::mouseMoveEvent(QMouseEvent*event){
printf("%d,%d\n",event->x(),event->y());
}
voidGLWidget::keyPressEvent(QKeyEvent*event){
switch(event->key()){
caseQt::Key_Escape:
close();
break;
default:
event->ignore();
break;
}
}
5- Compilez et lancez
Vous aurez une belle fenêtre noire :-) Voila votre premier programme.
Pour la suite vous pouvez regarder:
sur digitalfanatics.org la traduction française et l'adaptation qt des tutoriaux de NeHe
Je vous donnerai bientôt d'autres liens de tutoriaux.