问题标签 [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.
qt - OpenGL资源共享策略
我正在创建一个类似 CAD 的应用程序(基于 Qt),它将是一个多文档界面,每个文档将包含大约 5 个视口(源自 QGLWidget)。因此,我需要在整个应用程序中共享我的平面着色器,然后在每个文档(即 5 个视口)之间共享 3D 资产(存储为 VBO 的模型)。
我想只要我分享着色器程序和 VBO GLuint 地址,所有这些都会自动工作 - 它不会。我认为因为每个视口/上下文在显卡上都有自己的地址空间,如果有人知道更好,请告知!
我希望在应用程序启动时编译着色器,但这证明很困难,因为我需要一个有效的 QGLWidget 才能让 OpenGL 预先进入有效状态。但是由于我需要共享 QGLWidgets(通过它们的构造函数)以让它们共享资源,因此需要在实例化其他的之前创建并显示一个。但这是非常不切实际的,因为要同时向用户显示多个视图。
这一定比我想象的要容易,因为它几乎不是开创性的东西,但我真的很挣扎——谁能指出我正确的方向?
谢谢,凸轮
c++ - Linux中对vtable、Qt的未定义引用
我试图在 Ubuntu 10.04 的 Code::Blocks 下编译 Qt 和 OpenGL 程序。我得到'未定义的引用'vtable for GLWidget'
我从这个人那里借了代码来看看它是否有效,因为同样的原因我的代码不起作用。代码
这是 GLWidget.cpp:
我从 GL 部分中删除了代码以使其更短。如果你需要它,我可以随时发布。
qt - QGraphicsView 之上的透明 QGLWidget
我QGraphicsView
用来显示 2D 图像,也有一个单独的QGLWidget
窗口来显示一些 3D 对象。我正在根据 3D 对象的旋转动态更改“QGraphicsView”中显示的图像。
我想在 2D 图像上渲染一个半透明的 3D 对象,就像 Maya 2009 曾经做的那样(注意视口右上角的立方体):(来源:boulevard-creation.com)
是否可以使用我当前的小部件执行此操作?如果没有,怎么可能做到?
我能想到的一种选择是渲染所有内容QGLWidget
并将 2D 图像显示为背景平面上的纹理,但这似乎有点痛苦。
windows - 将 Ogre 嵌入到 windows 平台上的 qt 应用程序中
将 Ogre 嵌入 qt 应用程序 链接:QtOgre
但是是mac和linux平台,我尝试迁移到windows平台,但是失败了。我的应用程序运行如下:
/////////////////////////////////
macos - qt 中的 Glwidget 问题与坐标
我在 Mac OS X 上运行 qt 4.7,并且为 glwidget 绘制了错误的坐标。我已经在 Fedora 盒子上试过了,效果很好。有谁知道glwidget for mac是否有错误?或者我该如何解决?
qt - 共享 OpenGL VAO/VBO/等。通过 QGLWidget
我正在使用 QGLWidgets 的 3 层层次结构在我的 CAD 类应用程序中的 5 个 OpenGL 视口之间共享着色器和顶点数据。根上下文用于编译应用程序范围的着色器,每个文档上下文用于共享模型顶点数据,视口上下文是实际执行渲染的上下文(还包含网格顶点数据和其他每个视口的内容)。
着色器共享似乎工作正常,网格绘图也是如此,但是在共享顶点数据时它失败了,老实说 - 我看不出它应该如何工作......
我在模型上下文处于当前状态时为项目构建了一个 3D 图标,因为它是第一个 VAO,它的“名称”为 1。当我开始绘制对象时,视口上下文(与模型上下文共享,请记住) 是当前的,因此调用了 VAO 1,但绘制的是视口的VAO 1 - 我漂亮的红色网格中心线。可以共享 OpenGL 上下文,但是如何指定每个项目所属的“命名空间”,因为名称不是唯一的?
我尝试在模型 VAO 调用之前使模型上下文处于当前状态,但是绘制了正确的 VAO 和视口,我认为在 QPainter::beginNativePainting() 块期间切换上下文不会让 OpenGL 高兴。
这对我来说似乎是一件非常基本的事情,所以我必须做一些愚蠢的事情 - 有什么建议吗?
c++ - QGLWidget 在 Windows 7 中显示为黑色
我使用 Visual Studio 2010 在 Windows XP (Qt 4.7.2) 中编写和测试了一些代码,然后我在另一台安装了 Windows 7 的机器上进行了尝试。
该程序打开一个 QDialog 并创建一个 QGLWidget,我在其中显示网络摄像头图像(经过一些处理)。虽然在 Windows XP 中图像显示正确,但当我在 Windows 7 机器上测试程序时,QGLWidget 变黑并且没有显示图像。但奇怪的是,当我在窗口周围移动时,它超出了屏幕的边界,当我再次停止移动时,图像会立即显示并变成黑色,这让我认为图像被正确接收/processed(有时),这可能是 QTimer 的问题。
相关代码为:
初始化:
每次超时调用的插槽:
最后是 Widget 的绘制函数:
知道我在做什么错吗?可能是 QTimer 没有调用 SLOT timeOutSlot?
qt - QScrollArea 中的 QGLWidget 说“无效的可绘制”
当我在主 QWidget 的布局中显示我的 QGLWidget 时,一切都很好。当我将 QGLWidget 放入 QScrollArea 中,然后显示时,Python 会说:
qt - OpenCV + OpenGL + Qt
我正在设计自己的增强现实应用程序。我已经检测到我正在使用的模式的 4 个角。在以正确的顺序检测到 4 个角后,我将它们传递给 cvFindExtrinsicCameraParams2。对于对象相对于相机框架的旋转和平移,我得到了很好的结果。现在我必须将这些信息(旋转向量和平移向量)放入 OpenGL 中来绘制一些东西。自然,我使用 cvRodrigues2 从旋转向量中获取旋转矩阵。除此之外,我以这种方式使用 QGlWidget 观看相机:
GLWidget.h
GLWidget.cpp
好的,所以,作为 MainWindow 的构造函数中的附加说明,我有类似的内容:
为了把 GL 窗口放在 MainWindow 里面。我还在 GLViewer.h 中创建了一个新变量,名为:
因此,为了显示 3D 对象,我在 GLViewer 中创建了一个方法,如下所示:
之后,在使用 glDrawPixels() 绘制图像之后,显然在弹出矩阵之后,我将类似这样的方法放入 GLViewer::paintGL() 方法中:
因此,对于 modelViewMatrix,我考虑到我必须将其排序为列而不是行,或者转置,无论你想要什么......所以,自然地,作为最后一步,我在之后调用创建的函数 GLWidget::setModelView我将相机内在和外在转换为一个数组:
但是我什么也没看到......我尝试了一个代码,我得到了绘制轴但没有投影矩阵的工作......但是,当我使用 glutPerspective() (显然在 glMatrixMode(GL_PROJECTION) 之后)我可以'什么都看不到......所以,我不知道是否有人在 Qt 中使用增强现实而不使用 ARToolkit 的工作代码,因为正如我所说,我正在为自己获取外部相机参数......所以,如果有人有一个工作代码,您可以在其中获取外部相机参数并将它们转换为 openGL 投影和模型视图矩阵......嗯,这将非常有帮助......这是因为我找到了这个例子:
我按照所有步骤实现了 2 个相机型号之间的转换,但没有成功......如果有人有工作代码,我将不胜感激......谢谢!
qt - QGLWidget 在 QT 中是如何工作的?
令人惊讶的是,我将 QWidget 切换为 QGLWidget,现在我的 QPainter::drawImage 调用速度提高了 5 倍。除了小部件类型之外,我没有改变其他任何东西。这如何使 QPainter 调用性能更好?我很高兴它有效,但我只是不明白如何。有任何想法吗?
谢谢。