Problème avec openGl
Mourad2009B
Messages postés
145
Statut
Membre
-
Mourad2009B Messages postés 145 Statut Membre -
Mourad2009B Messages postés 145 Statut Membre -
Bonjour à tous,
Voila, comme c'est indiquer dans le titre, j'ai essayé d'intégrer opengl à une application Qt et ça provoque des erreurs de compilation.
Je travaille sous windows 10, et QtCreatot 2.4.2, et Qt dans sa version 5.5
Voici mon main.cpp
Ensuite j'ai créé une class MainWindow avec interface graphique, dans l'interface graphique j'ai intégré un objet openGLWidget
Voici le fichier mainwindow.h
Voici le fichier mainwindow.cpp
Ensuite j'ai créé une classe GLWidget qui hérite de QGLWidget, pour promouvoir l'objet openGLWidget à cette dernière.
Voici le fichier glwidget.h
Et voici le fichier glwidget.cpp
Et après compilation j'ai l'erreur suivante.
avant cette étape j'ai ajouté un objet QWidget dans l'interface graphique à la place de l'objet openGLWidget là ça compile si j'enlève la ligne
si je laisse la ligne
ça provoque l'erreur suivante
Voila, comme c'est indiquer dans le titre, j'ai essayé d'intégrer opengl à une application Qt et ça provoque des erreurs de compilation.
Je travaille sous windows 10, et QtCreatot 2.4.2, et Qt dans sa version 5.5
Voici mon main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Ensuite j'ai créé une class MainWindow avec interface graphique, dans l'interface graphique j'ai intégré un objet openGLWidget
Voici le fichier mainwindow.h
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Voici le fichier mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
Ensuite j'ai créé une classe GLWidget qui hérite de QGLWidget, pour promouvoir l'objet openGLWidget à cette dernière.
Voici le fichier glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QObject>
#include<QGLWidget>
#include<windows.h>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QGLWidget *parent = 0);
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
};
#endif // GLWIDGET_H
Et voici le fichier glwidget.cpp
#include "glwidget.h"
GLWidget::GLWidget(QGLWidget *parent) : QGLWidget(parent)
{
}
void GLWidget::initializeGL()
{
glClearColor(1.0, 1.0, 0.0, 1.0);
}
void GLWidget::paintGL()
{
}
void GLWidget::resizeGL(int w, int h)
{
}
Et après compilation j'ai l'erreur suivante.
D:\Fichiers applications\C++\Projets_QtCreator\IGN\test_opengl2\build-OpenGl_2-Desktop_Qt_5_5_0_MinGW_32bit-Release\ui_mainwindow.h:49: erreur : invalid conversion from 'QWidget*' to 'QGLWidget*' [-fpermissive]
openGLWidget = new GLWidget(centralWidget);
avant cette étape j'ai ajouté un objet QWidget dans l'interface graphique à la place de l'objet openGLWidget là ça compile si j'enlève la ligne
glClearColor(1.0, 1.0, 0.0, 1.0);
si je laisse la ligne
glClearColor(1.0, 1.0, 0.0, 1.0);
ça provoque l'erreur suivante
D:\Fichiers pplications\C++\Projets_QtCreator\ test_OpenGl3\test_opengl_3\glwidget.cpp:-1: erreur : undefined reference to `_imp__glClearColor@16'
1 réponse
Bonjour à tous, j'ai dû changer mon code
voici les fichiers changés
fichier MainWindow.h
fichier MainWindow.cpp
fichier QopenGLWidget.h
dans ma fenêtre MainWindow j'ai rajouté une fenêtre openglWidget que j'ai promue à ma classe OpenGlWidget
et là la fenêtre s'affiche et même que j'arrive à changer la couleur de fond avec
mais pour dessiner avec
merci d'avance pour votre aide
voici les fichiers changés
fichier MainWindow.h
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
fichier MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
fichier QopenGLWidget.h
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
#include <QObject>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class OpenGlWidget : public QOpenGLWidget
{
public:
OpenGlWidget(QWidget *parent = 0);
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
};
#endif // OPENGLWIDGET_H
fichier QopenGLWidget.cpp
#include "openglwidget.h"
OpenGlWidget::OpenGlWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
void OpenGlWidget::initializeGL()
{
GLfloat vertices[] = {
0.0f, 0.707f,
-0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -1.0f
};
GLfloat colors[] = {
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f,
};
GLubyte indices[] = { 0, 1, 2, 2, 3, 0, // front
4, 5, 6, 6, 7, 4, // right
8, 9,10, 10,11, 8, // top
12,13,14, 14,15,12, // left
16,17,18, 18,19,16, // bottom
20,21,22, 22,23,20 }; // back
QOpenGLFunctions *glFuncs = QOpenGLContext::currentContext()->functions();
glFuncs->glActiveTexture(GL_TEXTURE1);
glFuncs->glDrawElements(GL_TRIANGLES, 1, GL_UNSIGNED_SHORT, indices);
glFuncs->glClearColor(0.0, 0.0, 0.5, 1.0);
glFuncs->glVertexAttribPointer(10, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glFuncs->glVertexAttribPointer(10, 3, GL_FLOAT, GL_FALSE, 0, colors);
glFuncs->glEnableVertexAttribArray(0);
glFuncs->glEnableVertexAttribArray(1);
glFuncs->glEnableVertexAttribArray(2);
glFuncs->glClearDepthf(1.0);
glFuncs->glDrawElements(GL_LINE, 4, GL_UNSIGNED_INT, indices);
//glFuncs->glDrawArrays(GL_TRIANGLES, 0, 2);
}
void OpenGlWidget::paintGL()
{
}
void OpenGlWidget::resizeGL(int w, int h)
{
}
dans ma fenêtre MainWindow j'ai rajouté une fenêtre openglWidget que j'ai promue à ma classe OpenGlWidget
et là la fenêtre s'affiche et même que j'arrive à changer la couleur de fond avec
glFuncs->glClearColor(0.0, 0.0, 0.5, 1.0);
mais pour dessiner avec
glFuncs->glDrawElements(GL_LINE, 4, GL_UNSIGNED_INT, indices);il n' y a rien qui s'affiche, par contre il n' y a aucune erreur de compilation
merci d'avance pour votre aide
Mourad2009B
Messages postés
145
Statut
Membre
1
juste un exemple svp