问题标签 [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 回答
1337 浏览

qt - 树莓派上的 Qt OpenGL 上下文

我正在编写一个带有 Qt5 opengl 上下文的程序。它在我的桌面(fedora 23)上运行良好。但我必须在 pi 2 上运行它。所以我在每个地方下载 Qt5 源代码并在 pi 上本地编译它。当我尝试在 pi 上编译和运行我的程序时,它会引发以下错误:

在 Qt 论坛中,我看到 Raspberry pi XCB 无论如何都无法与 egl 集成。此外,当我配置 Qt 源代码时,EGL on x 选项为否。但是启用了 GLX。无论如何设置 QXcbIntegration 以在 pi 上使用 GLX?

我试图修复 XCB 和 egl 集成。所以我尝试在 qtbase 的 config.tests/qpa 目录中重新编译 egl-x11 测试以查看错误。输出是:

有没有办法修复 XCB 和 EGL 集成?

如果在树莓派上既不能进行 EGL 也不能进行 GLX 集成,我该怎么做才能在 pi 上运行我的应用程序?

0 投票
2 回答
1118 浏览

opengl - 如何使用 QOpenGLFrameBufferObject 进行阴影映射?

我正在尝试使用 Qt 的 OpenGL 类渲染带有阴影的场景(如下所示平台上的自行车)。

没有阴影的自行车模型截图

我意识到我们需要为此做两次传球。

第一次从灯光的角度渲染深度图,第二次从相机的角度渲染场景,片段着色器使用深度图作为纹理来确定片段是否在阴影内.

为了捕获深度图,我将从灯光的角度将场景渲染到帧缓冲区中,如下所示

每个模型都使用

带顶点着色器

和片段着色器

然后为了在第二遍中使用阴影纹理,我在第二遍的片段着色器中执行此操作。

但以上所有似乎都没有区别。第二遍我看不到任何阴影。

有人可以指出我哪里出错了吗?

0 投票
1 回答
1652 浏览

opengl - 如何使用 QOpenGLTexture 构建立方体贴图纹理?

我想使用 6 个图像使用 QOpenGLTexture 构造一个立方体贴图纹理。我想我把它们放对了。

我正在使用以下代码来构造立方体贴图

然后我在paintGL()期间绑定环境纹理如下

顶点着色器片段如下

片段着色器片段如下

我还有另一部分代码在天空盒上渲染立方体贴图。虽然我能够将 6 个图像投影到天空盒上并正确渲染,但我无法在场景中的圆环物体上渲染反射。

我得到一个光线充足的环面,没有反射。

有人可以帮忙吗?

0 投票
0 回答
498 浏览

c++ - 最大化窗口时Qt QApplication帧率下降

我们将 Qt 用于可视化引擎查看器,但该QApplication::processEvents()方法存在问题。由于我们需要控制帧率(以游戏循环方式),我们重写了 QApplication 来定义我们自己的和我们的游戏循环,看起来像

这很好用,processEvents()通话时间约为 0.001 秒,而对于空场景,通话doFrame()时间约为 0.0001 秒。现在,当我们双击标题栏(最大化窗口)时,我们遇到了一个问题。实际上,在这样做之后,processEvents()调用从大约 0.001 秒变为大约 0.01 秒 (*10)。大部分时间似乎都被占用了QPlatformBackingStore::composeAndFlush()

使用的查看器是基于 QOpenGLWidget 的,所有的渲染都是在 Qt 之外完成的(我们在 Qt FBO 中编写)。

请注意,我们没有覆盖QApplication::processEvents().

谢谢

0 投票
1 回答
80 浏览

linux - 即使拦截鼠标事件,Qt 窗口也会移动

我有一个 Qt OpenGL(使用 qt 5.5)应用程序,您可以在其中单击以拖动 3D 场景中的对象。

这是通过有一个QOpenGLWidget覆盖 mousePressEvent和的子类来实现mouseReleaseEventmouseMoveEvent

但是,当我拖动一个对象时,我可以在窗口开始激活窗口移动模式之前将其移动一帧,而我的鼠标移动实际上开始移动整个窗口,就好像我在拖动标题栏一样。

我怀疑应用程序和我的窗口管理器(kwin 5.4.3)之间存在冲突,但我不知道去哪里调试这个问题,以及这是我的应用程序的错还是我必须修复我的窗口管理器。

0 投票
1 回答
905 浏览

python - 调用 Python 对象进行连续场景更新时超出最大递归深度

我正在使用 opengl 在我的 Python 和 QT 应用程序中渲染一些图形。我按照许多教程将 openGL 添加到应用程序中,但它们都没有对场景进行持续更新。一个简单的例子,我想继续旋转场景中的对象,所以我不断增加角度并更新场景,但这会导致错误!

这是我在 github 上的代码(可以在这里找到),我刚刚添加了自动旋转:

updateGL 函数可以在导致此错误的 setXRotation 函数中找到:

谢谢

0 投票
2 回答
1084 浏览

opengl - OSG 将场景渲染成图像

我试图在我的 Qt 程序中将 OSG 场景渲染为图像。参考 SnapImageDrawCallback 的例子(https://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg45360.html)。

我将此设置为 osg::Viewer 的相机的 FinalDrawCallback,但我因空白图像而失败,并在调用图像时收到此警告“警告:在 State::apply() 开始时检测到 OpenGL 错误'无效操作'”-> readPixels,我的 osgViewer::Viewer 嵌入在 QQuickFramebufferObject 中。任何人都可以提供一些建议吗?

0 投票
0 回答
172 浏览

qt5 - QOpenGLFramebufferObject 的图像没有更新

以下是我的小部件的代码,它是 QOpenGLWidget 的子类。应该发生的是帧缓冲区对象在每帧之间在白色和黑色之间闪烁,但它只显示白色,这告诉我它只渲染一次然后从不更新。

我在这里正确使用帧缓冲区对象吗?还有一种更合适的方法可以在屏幕外绘制一些东西,然后在 QOpenGLWidget 中显示它吗?

0 投票
1 回答
103 浏览

c++ - 如何将framebuffer对象中的离屏数据绘制到QGLWidget中?

我使用 glGenFramebuffer、glBindFramebuffer 和其他相关函数来创建 Framebuffer Object(FBO),并使用 FBO 绘制离屏数据。现在我的问题是我在 QGLWidget 中完成了上述步骤,如何将 FBO 中的数据绘制回 QGLWidget?非常感谢!

0 投票
1 回答
235 浏览

c++ - Qt QOpenGLFunction_4_5_Compatibility 与 QOpenGLExtraFunctions

我目前在我的 GLWidget 中使用 QOpenGLFunction_4_5_Compability。因为QOpenGLFunctions不包含glLoadIdentity、glOrtho、glGenBuffers、glBindBuffer等。

为什么有些人使用 QOpenGLFunctions 而不是 QOpenGLFunction_4_5_Compability?QOpenGLFunctions 有什么特别之处?

我应该使用哪一个?