gpt4 book ai didi

c++ - 求教在Qt4中使用QGLWidget

转载 作者:行者123 更新时间:2023-11-28 08:30:57 25 4
gpt4 key购买 nike

我是新来的,有一个关于 Qt4 中的 opengl 的问题,我在过去几个月一直在学习它。

特别是,我正在寻求有关使用 QGLWidget 以良好的面向对象方式构建场景的最佳方法的建议。理想情况下,我希望场景中的每个项目都是 super “实体”类的子类。然后在我的主要 QGLWidget 中,我可以对实体进行排序并相应地呈现它们。

我注意到某些 openGL 函数(如 bindTexture)需要从 QGLWidget(或小部件的 QGLContext)调用。目前,我将一个指向控制我的主视口(viewport)的 QGLWidget 的指针传递给每个实体并存储它,以便我可以访问这些功能。这是个好主意吗?

我们将不胜感激地收到任何建议,甚至是可能有用的好网站/书籍的指导。我有 Blanchette/Summerfield 的书,但 OpenGL 部分很短,而且 Qt 网站上的大多数示例都非常简单。

谢谢,丹

最佳答案

我同意 Vime 的观点:您正在构建场景图,并且有许多经典方法可用于设计其对象层次结构。查看 Dave Eberly 的“3D 游戏引擎设计”,了解此类引擎的详细信息,并查看 OGRE再举个例子。

由于在特定线程上一次只能有一个 GL 上下文处于事件状态,因此考虑将 QGLWidget 指针存储为静态类成员以节省工作量:

class MyGLWidget : public QGLWidget {
// ...
public:
static inline MyGLWidget *GetActiveWidget() {
return ms_activeWidget;
}
protected:
static __declspec(thread) MyGLWidget *ms_activeWidget = 0; // uses MSVC extension
inline void SetActiveWidget() {
ms_activeWidget = this;
}
};

void MyGLWidget::paintGL() {
SetActiveWidget();
// ...
}

然后在您的实体类中,您可以在需要调用 QGLWidget 成员函数的少数情况下简单地调用 MyGLWidget::GetActiveWidget(),而不需要复制一个(可能不变的)指针在这个地方。

关于c++ - 求教在Qt4中使用QGLWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com