vous êtes mon dernier recours pour cette question parce que je suis à court d'idées. Donc tout d'abord j'ai déjà fait quelques trucs openGL mais pas avec les bibliothèques Qt.QOpenGLWidget ne dessine pas le tableau
Et comme je dois le faire avec les bibliothèques Qt à cause du compilateur Qt Android, il n'y a pas de solution pour moi. Donc, j'essayais de dessiner quelques coordonnées de vertex comme en openGL normal. Enregistrer des points dans le tableau flottant, etc. Donc, j'ai houblonné le bon vao, vbo .. shader .. mais ça ne dessinera rien. paintGL() ne dessine quelque chose que s'il est codé en dur avec glBegin et end. S'il vous plaît dites-moi où je me suis trompé et libérez-moi de ma souffrance ^^ Ah et oui il ya déjà des questions comme la mienne Here mais il n'y avait pas de réponse, donc je veux l'essayer à nouveau.
--MainWidget tête:
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QVector2D>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QVector3D>
#include <QOpenGLVertexArrayObject>
class MainWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0);
~MainWidget();
protected:
void initializeGL() Q_DECL_OVERRIDE;
void resizeGL(int w, int h) Q_DECL_OVERRIDE;
void paintGL() Q_DECL_OVERRIDE;
GLfloat vertices[9];
private:
QOpenGLShaderProgram program;
QOpenGLBuffer arrayBuf;
QOpenGLVertexArrayObject vertexArrayID;
};
#endif // MAINWIDGET_H
- MainWidget Cpp:
#include "mainwidget.h"
MainWidget::MainWidget(QWidget *parent): QOpenGLWidget(parent){
}
MainWidget::~MainWidget(){
}
void MainWidget::initializeGL(){
initializeOpenGLFunctions();
glClearColor(0, 0, 0.4f, 0);
glEnable(GL_DEPTH_TEST);
//glEnable(GL_CULL_FACE);
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f
};
for(int i = 0; i < 9; i++){
vertices[i] = g_vertex_buffer_data[i];
}
vertexArrayID.create();
vertexArrayID.bind();
program.addShaderFromSourceFile(QOpenGLShader::Vertex, "vertex.vert");
program.addShaderFromSourceFile(QOpenGLShader::Fragment, "fragment.frag");
program.link();
program.bind();
arrayBuf.create();
arrayBuf.bind();
arrayBuf.allocate(&vertices, 9 * sizeof(GLfloat));
/* glGenBuffers(1, &arrayBuf);
glBindBuffer(GL_ARRAY_BUFFER, arrayBuf);*/
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
}
void MainWidget::resizeGL(int w, int h){
}
void MainWidget::paintGL(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
arrayBuf.bind();
arrayBuf.allocate(&vertices, 9*sizeof(GLfloat));
int vertexLocation = program.attributeLocation("vertex");
program.enableAttributeArray("vertexLocation");
program.setAttributeBuffer(vertexLocation, GL_FLOAT, 0, 3, sizeof(GLfloat));
//glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
}
--Main Cpp:
#include <QApplication>
#include <QLabel>
#include <QSurfaceFormat>
#ifndef QT_NO_OPENGL
#include "mainwidget.h"
#endif
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSurfaceFormat format;
format.setDepthBufferSize(24);
QSurfaceFormat::setDefaultFormat(format);
app.setApplicationName("GLtest");
#ifndef QT_NO_OPENGL
MainWidget widget;
widget.show();
#else
QLabel note("OpenGL Support required");
note.show();
#endif
return app.exec();
}
--Vertex Shader aussi facile que possible:
#version 330
layout(location = 0) in vec3 vertex;
void main(){
gl_Position = vec4(vertex, 1.0);
}
--fragment Shader:
#version 330
out vec3 color;
void main(){
color = vec3(1,0,0);
}
Merci à l'avance .. tout type d'aide est la bienvenue! Vive
sainte mère ... merci beaucoup! maintenant je me sens stupide de demander –
Np, si cela a résolu votre problème, vous pouvez accepter la réponse :) – BDL