问题标签 [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.
c++ - 如何获取可靠的 QGLWidget 快照
在我的应用程序中,我出于两个目的对 QGLWidget 的内容进行快照:
- 当只有叠加层发生变化时,不要一直重绘场景,而是使用缓存的像素图
- Lat 用户截取特定情节的屏幕截图(3D 场景)
我尝试的第一件事是grabFrameBuffer()
。对于第一个应用程序使用此功能是很自然的,小部件中当前可见的正是我要缓存的内容。
问题:在某些硬件上(例如 Intel 集成显卡、带有 GeForce 显卡的 Mac OS X),获得的图像不包含当前屏幕内容,而是之前的内容。因此,如果场景将被绘制两次,在屏幕上您会看到第二张图,在图像中您会看到第一张图(应该是后缓冲区的内容?)。
我尝试的第二件事是renderToPixmap()
。这呈现使用paintGL()
,但不使用paint()
。我有我所有的东西paint()
,因为我使用 Qt 的绘画功能,并且只有一小部分代码使用本机 GL ( beginNativePainting()
, endNativePainting()
)。
我还尝试了常规 QWidget 的快照功能(QPixmap::fromWidget(),或者它的名称),但是 GL 帧缓冲区是黑色的。
关于如何解决问题并获得当前绘制场景的可靠描述的任何想法?
qt - QGLBuffer 使用
我在理解如何使用 QGLBuffer 渲染简单对象(例如 Rectangle )方面遇到了一些问题。我正在尝试为我的应用程序制作选择矩形。这是我在做什么的代码示例:
尽管只是示例,但我确信我的代码和我对技术的理解中存在一些错误。代码编译没有错误并运行,但没有绘制。
c++ - 摆脱在 Qt QGlWidget 中绘制实体对象的 glut 函数
我需要在 QGlWidget 中以 3D 方式绘制球体、圆柱体和圆锥体。
现在我正在使用 glutSolidSphere、glutSolidCone 和 gluQuadric 的可怕技巧来绘制圆柱体。
我只想使用一个框架进行 3D 绘图——在本例中为 Qt——并摆脱所有那些 Glut 函数。
在 Qt <= 4.6 中是否有一些 Qt 类可以做到这一点?
这样做还可以让我在没有 glut 库的情况下重新分发我的可执行文件,并摆脱 glutInit 函数!
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 是否在绘制场景后保留矩阵?有什么方法可以使这段代码线程安全吗?
qt - QGLWidget。绘制时更新显示。
每个文件都包含我要显示的 3D 点。我想在读取每个文件后查看显示。在 file1 之后,我想在从 file2 添加更多点之前查看这些点。在从 file3 添加更多点之前,我想查看文件 1 和 2 中的点。
如何使用 QGLWidget 函数做到这一点?
我四处搜寻,发现了 updateGL() 函数。我想每次在添加新点之前都更新绘图功能,但这效率低下。有什么方法可以保存上下文(或它叫什么)?
我正在使用库 libQGLViewer,它使用 QGLViewer 类,继承自 QGLWidget。
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 应用程序的目的。
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。
c++ - paintEvent中的Qt QPainter消除了用paintGL绘制的图形
我有以下代码
问题是该QPainter
行多次调用 initializeGL 和 paintGL 并最终在我的 OpenGL 渲染场景上创建了一个空白/灰色区域。如果我尝试用 绘制类似 adrawText
的QPainter
内容,则会显示文本,但文本的背景是完全覆盖我的 OpenGL 绘制场景的灰色矩形。
这有什么问题?
c++ - QGLWidget paintEvent:在哪里初始化openGL?
似乎QGLWidget的paintEvent方法是在initializeGL之前调用的,那么我应该把我的openGL初始化代码放在哪里呢?
我将它放入这样的paintEvent方法中:
我真的不喜欢每次引发 paintEvent 时都调用我的 glew 库初始化函数的想法......虽然这很有效。
有什么建议吗?
c++ - QGLWidget - 如何使用重绘构建程序
这应该很简单:我正在使用 QGLWidget 来绘制一些 openGL 图形,并且我希望能够在渲染的 openGL 图形上写一些东西,所以我使用 QPainter 的 Qt 演示中的重绘。
这是我构建程序的两个工作选择:
考虑到纹理和着色器并不总是相同的,这些选项中的任何一个是否可以接受(在性能和合理方面)?
如果不是:您将如何构建程序?
感谢您的任何帮助