问题标签 [qglwidget]

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 投票
4 回答
4068 浏览

c++ - 如何获取可靠的 QGLWidget 快照

在我的应用程序中,我出于两个目的对 QGLWidget 的内容进行快照:

  • 当只有叠加层发生变化时,不要一直重绘场景,而是使用缓存的像素图
  • Lat 用户截取特定情节的屏幕截图(3D 场景)

我尝试的第一件事是grabFrameBuffer()。对于第一个应用程序使用此功能是很自然的,小部件中当前可见的正是我要缓存的内容。 问题:在某些硬件上(例如 Intel 集成显卡、带有 GeForce 显卡的 Mac OS X),获得的图像不包含当前屏幕内容,而是之前的内容。因此,如果场景将被绘制两次,在屏幕上您会看到第二张图,在图像中您会看到第一张图(应该是后缓冲区的内容?)。

我尝试的第二件事是renderToPixmap()。这呈现使用paintGL(),但不使用paint()。我有我所有的东西paint(),因为我使用 Qt 的绘画功能,并且只有一小部分代码使用本机 GL ( beginNativePainting(), endNativePainting())。

我还尝试了常规 QWidget 的快照功能(QPixmap::fromWidget(),或者它的名称),但是 GL 帧缓冲区是黑色的。

关于如何解决问题并获得当前绘制场景的可靠描述的任何想法?

0 投票
0 回答
1679 浏览

qt - QGLBuffer 使用

我在理解如何使用 QGLBuffer 渲染简单对象(例如 Rectangle )方面遇到了一些问题。我正在尝试为我的应用程序制作选择矩形。这是我在做什么的代码示例:

尽管只是示例,但我确信我的代码和我对技术的理解中存在一些错误。代码编译没有错误并运行,但没有绘制。

0 投票
3 回答
853 浏览

c++ - 摆脱在 Qt QGlWidget 中绘制实体对象的 glut 函数

我需要在 QGlWidget 中以 3D 方式绘制球体、圆柱体和圆锥体。

现在我正在使用 glutSolidSphere、glutSolidCone 和 gluQuadric 的可怕技巧来绘制圆柱体。

我只想使用一个框架进行 3D 绘图——在本例中为 Qt——并摆脱所有那些 Glut 函数。

在 Qt <= 4.6 中是否有一些 Qt 类可以做到这一点?

这样做还可以让我在没有 glut 库的情况下重新分发我的可执行文件,并摆脱 glutInit 函数!

0 投票
1 回答
335 浏览

multithreading - Qt 中的 OpenGL 多线程,glGet* 结果的问题

我正在使用 QGLWidget 和 OpenGL 在 Qt (4.8.2)(VS 2008) 中编写图形应用程序。这是应用程序的简短描述:这是一个物理模拟。它由 2 个线程组成。主应用程序线程处理场景绘制(QGLWidget 子类)和事件。计算线程在循环中计算模拟的下一步。现在...我想使用光标(拖动对象或类似的东西)与模拟进行交互。由于我决定不在场景中进行智能射线拍摄以及一些空间空间分解(也许我必须这样做),我希望计算线程执行如下操作:

为了获得 [px;py;pz] 点的屏幕 [x;y] 坐标,并将它们用于计算模拟的下一步。好吧,事实证明主线程总是得到正确的 modelviewMatrix 和 projectionMatrix 数组,但是当它由计算线程执行时,它会得到垃圾矩阵数据。我尝试了很多事情......在查询 OpenGL 之前运行 makeCurrent(),锁定任何 OpenGL 操作,因此矩阵应该不受影响,但没有成功。我想知道,这甚至可能吗?OpenGL 是否在绘制场景后保留矩阵?有什么方法可以使这段代码线程安全吗?

0 投票
1 回答
348 浏览

qt - QGLWidget。绘制时更新显示。

每个文件都包含我要显示的 3D 点。我想在读取每个文件后查看显示。在 file1 之后,我想在从 file2 添加更多点之前查看这些点。在从 file3 添加更多点之前,我想查看文件 1 和 2 中的点。

如何使用 QGLWidget 函数做到这一点?

我四处搜寻,发现了 updateGL() 函数。我想每次在添加新点之前都更新绘图功能,但这效率低下。有什么方法可以保存上下文(或它叫什么)?

我正在使用库 libQGLViewer,它使用 QGLViewer 类,继承自 QGLWidget。

0 投票
1 回答
614 浏览

qglwidget - 如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?

最初,我遵循http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt的结构。我创建了一个 vanilla Visual Studio 2010 Qt 应用程序项目,单击 .ui 文件启动 Qt Designer,插入一个 QWidget 并将其提升为 myglwidget。然后我创建了 QGLWidget 的 myglwidget 子类。

效果很好,我得到了我的红色三角形。

问题是当主窗口调整大小时,myglwidget 不会收到任何调整大小事件,即使我将小部件大小属性设置为“扩展”也是如此。

当我重构我的应用程序构造函数以调用 setCentralWidget(&myglwidget_) 代码编译并运行但没有出现 OpenGL 窗口。

我没有看到如何调整我的小部件以匹配主窗口大小。我也不明白为什么 setCentralWidget 方法不起作用。

我相信我知道如何通过编写明确的 Qt 代码来解决问题,但这违背了我尝试使用 Qt Designer 在 Qt 中构建 OpenGL 应用程序的目的。

0 投票
2 回答
470 浏览

c++ - 试图从整个应用程序访问 QGLWidget

我基本上想要做的是创建 a 的一个实例QGLWidget(或者更确切地说是 的派生类QGLWidget),将其添加到 a QMainWindow,然后QGLWidget从我的 QTCreator 程序中的任何位置访问 的渲染上下文,以便能够在任何地方调用裸 OpenGL我选择了。

我尝试过的事情:

1)创建一个QGLWidget被调用的子类OGLWidget并将其变成一个单例,然后尝试将单例类“OGLWidget”子类化。我认为这将使我能够访问 OGLWidget 单例正在使用的相同渲染上下文,但它不起作用。

2)使用构造函数QGLWidget(QWidget * parent, QGLWidget * shared, Qt::WindowFlags)。对于这个,我尝试将单例对象转换为 QGLWidget,然后在我将 QGLWidget 子类化到另一个名为“Display”的类中时将其粘贴在此构造函数中。我尝试在每个类 openGl 调用之前调用 makeCurrent ,但只有原始单例会绘制。我还检查了 isSharing 并返回 true。

0 投票
1 回答
1146 浏览

c++ - paintEvent中的Qt QPainter消除了用paintGL绘制的图形

我有以下代码

问题是该QPainter行多次调用 initializeGL 和 paintGL 并最终在我的 OpenGL 渲染场景上创建了一个空白/灰色区域。如果我尝试用 绘制类似 adrawTextQPainter内容,则会显示文本,但文本的背景是完全覆盖我的 OpenGL 绘制场景的灰色矩形。

这有什么问题?

0 投票
2 回答
2991 浏览

c++ - QGLWidget paintEvent:在哪里初始化openGL?

似乎QGLWidget的paintEvent方法是在initializeGL之前调用的,那么我应该把我的openGL初始化代码放在哪里呢?

我将它放入这样的paintEvent方法中:

我真的不喜欢每次引发 paintEvent 时都调用我的 glew 库初始化函数的想法......虽然这很有效。

有什么建议吗?

0 投票
1 回答
612 浏览

c++ - QGLWidget - 如何使用重绘构建程序

这应该很简单:我正在使用 QGLWidget 来绘制一些 openGL 图形,并且我希望能够在渲染的 openGL 图形上写一些东西,所以我使用 QPainter 的 Qt 演示中的重绘。

这是我构建程序的两个工作选择:

考虑到纹理和着色器并不总是相同的,这些选项中的任何一个是否可以接受(在性能和合理方面)?

如果不是:您将如何构建程序?

感谢您的任何帮助