Problème avec openGl

Fermé
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025 - 10 oct. 2015 à 22:42
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025 - 13 oct. 2015 à 16:28
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
#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

Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025
13 oct. 2015 à 14:30
Bonjour à tous, j'ai dû changer mon code
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
0
Mourad2009B Messages postés 118 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 5 février 2025
13 oct. 2015 à 16:28
juste un exemple svp
0