QML下的OpenGL

时间:2014-09-23 21:30:46

标签: c++ opengl qml

所以我一直在使用QML处理OpenGL,并且一直在查看提供的相同名称的示例文件。我有点理解它是如何工作的但事情就是这样:我试图用我自己非常基本的Open GL东西替换该示例的paint()函数中的OpenGL着色器程序。但是我无法在屏幕上看到任何内容。我唯一能改变的是背景的颜色。因此,我想知道如何设置视口,相机以及在屏幕上显示内容所需的任何内容。我在OpenGL上有一些(非常生疏)的经验,但在过去,像freeglut这样的东西总能让生活变得更轻松。任何指针或示例(我可以在paint()方法中进行观察和学习的东西)都会非常感谢......

编辑:这就是我在paint()方法中所拥有的:

void QtOpenGLViewRenderer::paint()
{
    // The following two lines fixed the problem
    QOpenGLFunctions glFuncs(QOpenGLContext::currentContext());
    glFuncs.glUseProgram(0);

    glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height());

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClearColor(0.2, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);

    GLfloat triangle[] = {
        0.25f, 0.25f, 0.0f,
        0.75f, 0.25f, 0.0f,
        0.25f, 0.75f, 0.0f
    };

    GLfloat colors[] = {
        1.0f, 0.0f, 0.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        0.0f, 0.0f, 1.0f, 1.0f
    };

    glVertexPointer(3, GL_FLOAT, 0, triangle);
    glColorPointer(4, GL_FLOAT, 0, colors);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glShadeModel(GL_SMOOTH);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    glFlush();
}

我所看到的只是暗红色的背景,但没有三角形的迹象。这是为什么?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题以备记录。问题是Qt默认需要新的OpenGL着色语言(GLSL)样式指令。要使旧式OpenGL指令工作,您需要告诉Qt您将使用它们而不是着色器定义的程序。这是通过发出以下命令来完成的:

QOpenGLFunctions glFuncs(QOpenGLContext::currentContext());
glFuncs.glUseProgram(0);

要使这些工作正常,您还需要包含以下标题:

#include <QOpenGLFunctions>
#include <QOpenGLContext>