所以我一直在使用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();
}
我所看到的只是暗红色的背景,但没有三角形的迹象。这是为什么?
答案 0 :(得分:1)
回答我自己的问题以备记录。问题是Qt默认需要新的OpenGL着色语言(GLSL)样式指令。要使旧式OpenGL指令工作,您需要告诉Qt您将使用它们而不是着色器定义的程序。这是通过发出以下命令来完成的:
QOpenGLFunctions glFuncs(QOpenGLContext::currentContext());
glFuncs.glUseProgram(0);
要使这些工作正常,您还需要包含以下标题:
#include <QOpenGLFunctions>
#include <QOpenGLContext>