- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下问题:
我想要一个由许多 View 组成的应用程序,这些 View 从不同的视角、照明和其他选项渲染一个常见的 OpenGL 场景。
基本上,我的问题是用 qt 做到这一点的最佳方法是什么?
我的第一次尝试是创建多个 QOpenGLWidget 并获得一个通用的 QOpenGLContext,我在其中存储纹理以及网格和着色器。但它不适用于网格,因为顶点数组对象似乎不可共享。经过多次尝试,一个可能的解决方案是为每个需要网格的小部件存储一个 VAO,但这看起来非常糟糕。
所以,我想知道是否有解决此类问题的好方法,或者是否有很好的文档来了解这些 QOpenGLContext 的工作原理。
我想象的最简单的想法是只创建一个 QOpenGLContext 并在不同的小部件中使用它。但是我不知道如何单独创建一个 QOpenGLContext,也不知道什么样的 QWidgets 能够显示这些效果图。
这是我的第一篇文章,所以我不知道它是否足够清楚,或者我是否需要描述我的整个架构。
最佳答案
你已经尝试过了,所以我要传递有关共享上下文的信息。
OpenGL 上下文绑定(bind)到一个窗口:如果您只需要一个上下文,直接的答案是只有一个窗口。
使用小部件模块,您可以在同一个 QOpenGLWidget 中使用多个视口(viewport)获得同一场景的多个 View 。像这样的东西:
void myWidget::paintGL() {
//...
glViewport(
0, 0,
this->width()/2, this->height()/2
);
// draw scene from one point of view
glViewport(
this->width()/2, this->height()/2,
this->width()/2, this->height()/2
);
// draw scene from an other point of view
//...
}
您可能应该设计一个视口(viewport)类来存储和管理每个视口(viewport)的渲染参数。
缺点是您必须检测用户在哪个视口(viewport)中单击以处理交互:某种 if event.pos.x 介于 0 和 this->width()/2 ...
。
另一种方法可能是放下小部件模块并使用 Qt Quick 和 QML:快速窗口声明一个唯一的 OpenGL 上下文,其中每个快速项目都像一个视口(viewport),但封装在它自己的对象中,因此您不需要必须考虑用户在哪里进行交互。
继承 QQuickItem 而不是 QOpenGLWidget 并使用 qmlRegisterType() 宏将您的类导出到 QML。然后您可以在您的程序中创建一个 QQuickView 以加载您声明项目的 QML 代码。 Qt 文档中的示例 here .
关于c++ - 不同的QT widgets只获取一个QOpenGLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102106/
这些天我一直在网上阅读各种资料,试图找出如何在 Qt 中进行 OpenGL 渲染,显然旧的 QGL 模块已被弃用。我真的很喜欢新的 QOpenGLContext 并且它能够初始化 open gl 函数
问题的简短形式:如何使用 FBO 作为纹理在 QGLWidget 中进行绘制,而不只是获得空白的白色图像? 还有一些背景和细节...我正在使用 Qt 5.1 作为在 GPU 上进行一些图像处理的应用程
我们有一个使用 GLFW 创建的 3D 渲染窗口,我们希望使用 QWebkit 在渲染中显示 QWebPage(也称为将 QWebPage 渲染为 OpenGL 纹理)。只使用CPU版本太慢,Qt支持
我正在尝试从 http://www.kdab.com/opengl-in-qt-5-1-part-5/ 编译 Tesselation 的示例(包括源代码)与兼容性配置文件,它根本无法加载此配置文件:
我想获取GL_MAX_TEXTURE_SIZE的值在 Qt “早期”,因为我将为我的应用程序生成一些纹理图集。 我明白 glGetIntegerv没有“有效”上下文将无法工作。所以我创建了一个 QOp
注意:这是一个相当天真的问题。 在 Qt5 C++ 应用程序中调试和登录期间,打印内部变量的值很有用,在 Qt 中是常用的方式就是和这样的 friend 一起使用qDebug(): qDebug()<
我正在开发一个项目,该项目将使用 OpenCL 渲染图形以在 QOpenGLWidget 中显示。 recommended way要做到这一点,似乎是在 QOpenGLWidget 中已经存在的那个旁
我正在尝试使用 OpenGL 将 UI 作为插件添加到现有应用程序。为此,我将 UI 渲染到纹理中,并在绘制场景后在 3D 场景之上绘制该纹理。 纹理生成如下: if (context_ == nul
我正在运行 OS X 10.9.4 和 Qt 5.3.1。我需要创建一个使用 Open GL 3.3 的 QOpenGLContext。我的系统报告与 OpenGL 3.3 100% 兼容,但我得到的
我是一名优秀的程序员,十分优秀!