如何在Qt中配置OpenGL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Qt中配置OpenGL相关的知识,希望对你有一定的参考价值。

1.首先需要去opengl的官网下载glut库:

2.解压后,将glut32.lib和glut.lib两个文件拷贝到qt目录下的./lib文件夹中;

3.将glut.dll和glut32.dll两个动态链接库拷贝到C:\\windows\\system32中;

4.将glut.h文件拷贝到qt目录下的\\include\\QtOpenGL中,并建立glut文件【内容写上 #include "glut.h"】,保存为没有后缀名的文件;

5.切换到自己的程序中,在 **.pro 文件中添加:

LIBS += -lgut32

LIBS += -LC:\\glut

6. 在main.cpp中加入“#include<glut>”或者“#include<glut.h>”,这样就可以使用glut中的函数了,运行效果如下:

参考技术A 1.首先需要去opengl的官网下载glut库:
2.解压后,将glut32.lib和glut.lib两个文件拷贝到qt目录下的./lib文件夹中;
3.将glut.dll和glut32.dll两个动态链接库拷贝到C:\windows\system32中;
4.将glut.h文件拷贝到qt目录下的\include\QtOpenGL中,并建立glut文件【内容写上 #include "glut.h"】,保存为没有后缀名的文件;
5.切换到自己的程序中,在 **.pro 文件中添加:
LIBS += -lgut32
LIBS += -LC:\glut
6. 在main.cpp中加入逗#include<glut>地或者逗#include<glut.h>地,这样就可以使用glut中的函数了。本回答被提问者采纳

OpenGL:如何在 Qt 中使用 glMapBuffer?

【中文标题】OpenGL:如何在 Qt 中使用 glMapBuffer?【英文标题】:OpenGL : How to use glMapBuffer with Qt? 【发布时间】:2016-07-26 09:39:39 【问题描述】:

我正在尝试将 glMapBuffer 与 QOpenGLWidget 一起使用,但我找不到它。这是我包含的文件:

#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLBuffer>
#include <QDebug>
#include <QOpenGLTexture>
#include <GL/gl.h>
#include <GL/glext.h>
#include <QGLFunctions>
#include <QOpenGLShader>
#include <QOpenGLShaderProgram>

【问题讨论】:

【参考方案1】:

您不应该混合使用 QOpenGL 和 QGL(在项目配置中删除 QGLFunctions 等旧的、已弃用的 OpenGL 模块)。您不需要包含 gl.h 和 glext.h。

您包含 QOpenGLBuffer。 map()方法封装了glMapBuffer:

// creation

QOpenGLBuffer buffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
buffer->create();

// allocation

buffer->bind();

buffer->allocate(size_of_the_buffer);

buffer->release();

// update

buffer->bind();

void* buffer_data = buffer->map(QOpenGLBuffer::WriteOnly);

memcpy(buffer_data, your_data_to_copy, size_of_your_data_to_copy);

buffer->unmap();

buffer->release();

【讨论】:

map() 方法适用于 QOpenGLBuffer 对象,但我将 glBuffer 用于我的 VBO。我需要更改它,但我不知道该怎么做。 VBO 和其他的一样是一个 OpenGL 缓冲区:使用 QOpenGLBuffer 来管理它。我用一个例子编辑我的答案 好的,你的例子更好,但我还有问题。在您的示例中,glBufferSubData 的等价物是什么?是否需要为第一次数据传输更新它?它如何与 glVertexAttribPointer 一起使用?我如何操作偏移,因为我在缓冲区中传递顶点和纹理坐标数据。 对于 glBufferSubData 的等价物,您可以使用write()。您可以使用overload to allocate() 进行首次数据传输。 glVertexAttribPointer,应该通过QOpenGLShaderProgram使用,如果数据是交错的,它有一个stride参数。偏移量由值的“地址”隐式给出

以上是关于如何在Qt中配置OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

如何在qt中执行opengl

如何在 Qt 表单类中调整 OpenGL 小部件的大小

OpenGL:如何在 Qt 中使用 glMapBuffer?

如何使用 Qt 4 创建 OpenGL 3 上下文?

QT和OpenGL如何正确集成并显示纹理

Qt & OpenGL:如何尽可能频繁地渲染?