问题标签 [qtopengl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
597 浏览

c++ - 使用 QOpenGLContext 在小部件中进行渲染

这些天,我一直在网上阅读各种材料,试图弄清楚如何在 Qt 中进行 OpenGL 渲染,显然旧的 QGL 模块已被弃用。我真的很喜欢新的 QOpenGLContext,它能够初始化 open gl 函数,而不需要使用 GLEW。但是,我不知道如何像使用 QGLWidget 一样在小部件中使用这些功能。我需要在要使用 OpenGL 渲染的表面周围放置按钮和其他小部件,但所有在线教程和示例都表明我应该使用整个 QWindow 作为渲染表面。那么如何在 Qt 中渲染到小部件时使用新的便捷 API?

0 投票
1 回答
83 浏览

c++ - Qt是从哪个版本开始支持opengl的?

据说(在 Qt 文档中)Qt 2.3 有 opengl 模块。那么,它的支持的开始(版本号)在哪里?

0 投票
2 回答
107 浏览

c++ - QtOpengl 的演变

据我了解,在早期的 Qt 版本中没有模块,有不同功能的单独类,包括图形。在 qt 1.2 中实现了对 Opengl 的支持。但是,QPainter、QImage 存在于早期版本中。那么,说这些类是原生的(换句话说,是原始的类)是否正确?opengl 类 - 非本地(毕竟它是一个独立的分支)?我想了解 Qtopengl 的进一步演变,作为创建 2D 图形 ih Qt 的非本地和替代方法,该模块对本地方法(用于创建 2D 图形)的演变的影响。

0 投票
1 回答
926 浏览

data-visualization - 使用 qt 和 qtopengl 进行数据可视化

我理解“数据可视化或数据可视化是对数据的可视化表示的创建和研究,意思是“以某种示意图形式抽象出来的信息,包括信息单元的属性或变量”。

现在......这是一个非常奇怪的问题,但是......我想用 qt 和 qtopengl 制作一个(非常)简单的程序 - 一个立方体,其顶点具有 RGB 坐标,我的意思是它的颜色(0,0 ,0; 0,255,0 等等)。这个程序会说明数据可视化(也许只是一点点......)?

0 投票
2 回答
6252 浏览

qt - Qt OpenGL 小部件中的 3D 模型 (.3ds)

我需要在我的 QGLWidget(Qt OpenGL 小部件)中加载一个 3D 模型(.3ds 文件)。我正在寻找在 Linux、Windows 和 Mac 下工作的跨平台解决方案。

我在网上找到了一些解决方案,但仍然无法将它们中的任何一个集成到我的 Qt 应用程序中:

有什么建议吗?

0 投票
0 回答
240 浏览

qt - 如何使用 QTimer 修复 QTGLWidget 以减少渲染时间?

我目前正在为我的程序使用 QtOpenGL。我的程序在 3D 空间中绘制点。这些点可以是一到几千之间的任何数字。我正在使用函数“glusphere”来绘制球体来表示每个点。有了这个,每个帧都被创建了,我需要使用 QTimer 将每个帧显示为动画。这个动画应该是fps控制的。比如fps=30,我会把t=1000/30给QTimer的setInterval(t)。不管fps=10还是30,我发现fps对我的程序没有太大的改变。我通过将 fps 设置为 0 来寻找问题,并通过使用 setInterval(0) 观察渲染时间需要多少。结果如下:

n = 球体数量

当 n=10 时:28ms => 大约 30ms

当 n=100 时:87ms => 大约 90ms

当 n=150 时:137ms => 大约 140ms

当 n=1000 时:598ms => 大约 600ms => 0.6sec

从上面的结果来看,每一帧的渲染时间随着球体的数量线性增加。以下是我的代码的一部分:

澄清:

  • 每帧的渲染时间根据球体的数量而变化。
  • 球体的数量不应改变渲染时间
  • 即使它绘制了 1000 个球体,它也会花费半秒
  • 您认为问题在于使用胶球吗?
  • 如果有另一种方法来绘制球体,是否有可能超过 100 fps?

有人可以解释一下造成这种缓慢渲染的瓶颈在哪里吗?

0 投票
2 回答
4202 浏览

c++ - 使用 QOpenGLTexture 和 QOpenGLFrameBufferObject 的多重纹理

我正在尝试将以前的项目移植到新的 Qt5 OpenGL 类。我想使用 FBO 渲染到纹理。前面的代码使用了我按需附加到 FBO 的多个纹理。所以,我会附加某个纹理对象,执行渲染,附加另一个纹理并执行不同的操作,并将输出渲染到新附加的纹理,等等。

我想知道如何使用 Qt5 OpenGL 类来做这件事。例如,我不知道如何将某个QOpenGLTexture对象附加到 aQOpenGLFrameBufferObject以便我可以对其进行渲染。我可以看到有一个texture()方法和一个takeTexture()方法。但它们都只返回纹理 ID。另外,如何更改活动纹理单元?例如,我想从我的着色器程序中的两个纹理中采样。所以,我需要将两个纹理绑定到不同的纹理单元。

澄清一下,我在使用新 API 时遇到的主要问题是我没有看到任何QOpenGLFrameBufferObject会返回QOpenGLTexture对象的方法。只有toImage()方法texture()takeTexture()方法。我想我可以QOpenGLTexture使用QImage返回的 from构造一个toImage()。但我不确定这是否有效。

至于texture()and takeTexture(),我看不出它们的返回值如何使用新类。

0 投票
1 回答
1576 浏览

c++ - 当涉及旋转时,将鼠标坐标转换为 OpenGL 中的模型坐标

在 Qt 论坛中,我发现了这个问题并激发了我的好奇心。

我在 Qt 中找到了一个非常简单的示例来显示一个立方体,并修改了立方体逻辑以创建一个边长为 1 个单位的立方体。

然后我尝试点击模型并显示我点击的区域的坐标。

当不涉及旋转时,似乎采摘工作正常。但!如果我取消注释旋转(或其中一个),paintGL我最终会得到“错误”的值。

例如:

  • 没有旋转,几乎点击了立方体的最左边的边框:gluUnProject方法说我点击了点{ -0.49075, 0.234, 0.5 },这似乎没问题。

没有旋转的立方体

  • 启用旋转并几乎单击多维数据集的最左侧边框:我收到了 point { -0.501456, 0.157555, -0.482942 },这似乎是错误的。坐标不在其x范围内-0.5, 0.5

启用了两个旋转的立方体

我认为坐标转换是可以的。我一直在通过谷歌进行研究,人们总是使用相同的代码。此外,像素的颜色信息与我点击的面部颜色相匹配。

那么,谁能告诉我为什么当涉及旋转时我得到错误的坐标?我认为我在一些基本的 3D 理解方面失败了,但我无法意识到它在哪里。

这是代码:

主.cpp:

GLCube.h

GLCube.cpp:

笔记:

我在 Windows 8.1 64 位、Qt 4.8 和 MinGW 中运行它。

此外,两者都没有错误glReadPixelsgluUnProject退出(错误代码= GL_NO_ERROR

并且glut不可用。只有什么OpenGLQtOpenGL和/或glu提供。

0 投票
0 回答
453 浏览

opengl - QQuickItem 上的 Qt 矩形未正确呈现

我在使用 QQuickItem 的 QT5 中有一个痛苦的问题。我必须在 QML 中使用纯 openGL 绘制 3D 模型,所以我创建了自己的自定义 QQuickItem。到目前为止,一切都按预期工作:3D 模型在 QML 中精美地显示。

当我想在自定义 QQuickItem 旁边的同一个 QML 中放置一个简单的矩形时,就会出现问题。不再显示 3D 模型。这是为什么?

这是我的自定义快速项目代码:

这是我的 QML,在 3D 模型上有一个小矩形:

任何人都可以向我提供至少对此问题的解释或一些建议吗?

0 投票
1 回答
176 浏览

c++ - OpenGL:多种渲染方法..什么时候使用?

我是 OpenGL 的新手,我正在学习多个教程,我注意到有多种方法用于渲染对象,但我仍然不明白它们之间的区别以及何时使用它们中的每一个?

例如..我正在关注这个使用着色器渲染立方体的示例,当我尝试使用“正常”方式渲染它时 - 如果这是一个正确的表达式。什么都没有被渲染。我总是需要打电话shaderProgram.setAttributeArray()shaderProgram.enableAttributeArray()并且shaderProgram.disableAttributeArray()

但是,如果我尝试使用另一种方式直接渲染它 - 再次,如果这是一个正确的表达式 - 使用glBegin()and glEnd()。没有任何工作

另外,我有另一个问题着色器概念本身,我真的不明白什么时候应该使用它,什么时候不应该

这是我的例子: