OpenGL under QML
OpenGL under QML
所以我一直在QML下摆弄OpenGL,并一直在查看提供的同名示例文件。我有点理解它是如何工作的,但事情是这样的:我试图用我自己非常基本的Open GL东西来替换示例的paint()函数中的OpenGL着色器程序。然而,我无法在屏幕上看到任何东西。我唯一能改变的就是背景的颜色。所以我想知道如何设置视口、相机以及屏幕上需要的任何东西。我对OpenGL有一些(非常生疏的)经验,但在过去,总是有一些像免费供过于求这样的东西让生活变得更轻松。任何指向正确方向的指针或示例(我可以放在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();
}
我所看到的只是暗红色的背景,但没有三角形的迹象。为什么会这样?
为记录回答我自己的问题。问题是Qt默认情况下需要新的OpenGL着色语言(GLSL)风格的指令。要使旧式OpenGL指令发挥作用,您需要告诉Qt您将使用它们,而不是着色器定义的程序。这是通过发出以下命令来完成的:
QOpenGLFunctions glFuncs(QOpenGLContext::currentContext());
glFuncs.glUseProgram(0);
为了使这些工作,您还需要包括以下标题:
#include <QOpenGLFunctions>
#include <QOpenGLContext>
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- OpenGL under QML