问题标签 [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.
c++ - 使用 QOpenGLContext 在小部件中进行渲染
这些天,我一直在网上阅读各种材料,试图弄清楚如何在 Qt 中进行 OpenGL 渲染,显然旧的 QGL 模块已被弃用。我真的很喜欢新的 QOpenGLContext,它能够初始化 open gl 函数,而不需要使用 GLEW。但是,我不知道如何像使用 QGLWidget 一样在小部件中使用这些功能。我需要在要使用 OpenGL 渲染的表面周围放置按钮和其他小部件,但所有在线教程和示例都表明我应该使用整个 QWindow 作为渲染表面。那么如何在 Qt 中渲染到小部件时使用新的便捷 API?
c++ - Qt是从哪个版本开始支持opengl的?
据说(在 Qt 文档中)Qt 2.3 有 opengl 模块。那么,它的支持的开始(版本号)在哪里?
c++ - QtOpengl 的演变
据我了解,在早期的 Qt 版本中没有模块,有不同功能的单独类,包括图形。在 qt 1.2 中实现了对 Opengl 的支持。但是,QPainter、QImage 存在于早期版本中。那么,说这些类是原生的(换句话说,是原始的类)是否正确?opengl 类 - 非本地(毕竟它是一个独立的分支)?我想了解 Qtopengl 的进一步演变,作为创建 2D 图形 ih Qt 的非本地和替代方法,该模块对本地方法(用于创建 2D 图形)的演变的影响。
data-visualization - 使用 qt 和 qtopengl 进行数据可视化
我理解“数据可视化或数据可视化是对数据的可视化表示的创建和研究,意思是“以某种示意图形式抽象出来的信息,包括信息单元的属性或变量”。
现在......这是一个非常奇怪的问题,但是......我想用 qt 和 qtopengl 制作一个(非常)简单的程序 - 一个立方体,其顶点具有 RGB 坐标,我的意思是它的颜色(0,0 ,0; 0,255,0 等等)。这个程序会说明数据可视化(也许只是一点点......)?
qt - Qt OpenGL 小部件中的 3D 模型 (.3ds)
我需要在我的 QGLWidget(Qt OpenGL 小部件)中加载一个 3D 模型(.3ds 文件)。我正在寻找在 Linux、Windows 和 Mac 下工作的跨平台解决方案。
我在网上找到了一些解决方案,但仍然无法将它们中的任何一个集成到我的 Qt 应用程序中:
Assimp:它不是跨平台的,不支持 .3ds 模型(http://assimp.sourceforge.net/)
Qt3D:它是跨平台的,似乎是 OpenGL 小部件的正确选择。不幸的是,我仍然没有找到使用它的方法。(https://github.com/qtproject/qt3d)
Qt Quick:它使用 QML 文件而不是 QT 小部件。
3ds 加载器:http ://www.spacesimulator.net/wiki/index.php?title=Tutorials:3ds_Loader
有什么建议吗?
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?
有人可以解释一下造成这种缓慢渲染的瓶颈在哪里吗?
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()
,我看不出它们的返回值如何使用新类。
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 中运行它。
此外,两者都没有错误glReadPixels
地gluUnProject
退出(错误代码= GL_NO_ERROR
)
并且glut
不可用。只有什么OpenGL
,QtOpenGL
和/或glu
提供。
opengl - QQuickItem 上的 Qt 矩形未正确呈现
我在使用 QQuickItem 的 QT5 中有一个痛苦的问题。我必须在 QML 中使用纯 openGL 绘制 3D 模型,所以我创建了自己的自定义 QQuickItem。到目前为止,一切都按预期工作:3D 模型在 QML 中精美地显示。
当我想在自定义 QQuickItem 旁边的同一个 QML 中放置一个简单的矩形时,就会出现问题。不再显示 3D 模型。这是为什么?
这是我的自定义快速项目代码:
这是我的 QML,在 3D 模型上有一个小矩形:
任何人都可以向我提供至少对此问题的解释或一些建议吗?
c++ - OpenGL:多种渲染方法..什么时候使用?
我是 OpenGL 的新手,我正在学习多个教程,我注意到有多种方法用于渲染对象,但我仍然不明白它们之间的区别以及何时使用它们中的每一个?
例如..我正在关注这个使用着色器渲染立方体的示例,当我尝试使用“正常”方式渲染它时 - 如果这是一个正确的表达式。什么都没有被渲染。我总是需要打电话shaderProgram.setAttributeArray()
,shaderProgram.enableAttributeArray()
并且shaderProgram.disableAttributeArray()
但是,如果我尝试使用另一种方式直接渲染它 - 再次,如果这是一个正确的表达式 - 使用glBegin()
and glEnd()
。没有任何工作
另外,我有另一个问题着色器概念本身,我真的不明白什么时候应该使用它,什么时候不应该
这是我的例子: