【问题标题】:QT3D Multiview - Single View in WidgetQT3D Multiview - 小部件中的单一视图
【发布时间】:2018-11-24 17:52:47
【问题描述】:

我对“Qt 3D:多视口 QML 示例”有疑问Link

是否可以将单个视图(示例中的四个视图之一)添加到单独的小部件中。我尝试更改示例,但只能将所有四个视图添加到一个小部件。

下面的代码创建了一个相机,它应该显示在一个单独的小部件中。看图

我不确定这是否可能以及如何解决。

SimpleCamera {
    id: camera4
    lens: cameraLens3
    position: Qt.vector3d(100.0, 0.0, -6.0)
    viewCenter: Qt.vector3d(0.0, 0.0, -6.0)
}

【问题讨论】:

  • 尝试将链接中的相关细节添加到您的问题中,并更具体地展示您想要实现的目标
  • 我只知道如何使用 C++ 实现这一点:在这种情况下,您创建 Qt3DWindow 并将其放置在使用 QWidget::createWindowContainer 的小部件中。这将返回一个小部件,然后您可以在 UI 中使用它。您可以对多个不同的 3D 窗口执行此操作,尽管在某些时候性能会受到影响。我不确定您是否可以重用框架图,尽管 Qt 的文档经常指出不应共享对象,但您可以尝试看看会发生什么。
  • 我已经创建了一个 windowContainer 但我不知道如何显示单个视图(例如四个视图之一)。目前所有四个视图都显示在小部件内。如果我能解决这个问题,我想扩展它,所有四个视图都显示在四个单独的小部件中。

标签: qt qt3d


【解决方案1】:

在示例中,四个视图是使用 ViewportCameraSelector 类创建的。

视口类

Viewport 类定义了框架图的分支(Viewport 节点是其中的一部分)被渲染到的屏幕部分。该部分定义为(x, y, width, height)。整个屏幕的坐标是(0, 0, 1, 1)

如果您查看示例中的 QuadViewportFrameGraph 类,您会看到定义了四个视口 - 每个摄像头一个。左上角的相机渲染到屏幕的矩形(0, 0, 0.5, 0.5)。另一方面,右上角的相机渲染到(0.5, 0, 0.5, 0.5),即它使用屏幕大小的一半作为其x 偏移量。

CameraSelector 类

这个类定义了框架图的分支使用哪个相机来渲染内容。如果您查看该示例,您将在每个 Viewport 实例中看到一个 CameraSelector { id: someCamera }。这样,每个Viewport 都有自己的摄像头。

结论

如果您只想要一个视图,请删除主 Viewport 中的四个 Viewports 并添加一个相机选择器作为其子级。所以你的QuadViewportFrameGraph 应该是这样的(没有导入语句):

RenderSettings {
    id: quadViewportFrameGraph

    property alias camera: cameraSelector.camera;
    property alias window: surfaceSelector.surface

    activeFrameGraph: RenderSurfaceSelector {
        id: surfaceSelector

        Viewport {
            id: mainViewport
            normalizedRect: Qt.rect(0, 0, 1, 1)

            ClearBuffers {
                buffers: ClearBuffers.ColorDepthBuffer
                clearColor: Qt.rgba(0.6, 0.6, 0.6, 1.0)

                CameraSelector { id: cameraSelector }
            }
        }
    }
}

当然,您还必须调整实例化QuadViewportFrameGraph 的代码,并且只设置一个摄像头。如果您现在希望所有四个视图都显示在单独的小部件中,您需要创建四个 3D 窗口和窗口容器,并为每个视图创建一个这样的框架图(当然,使用不同的相机)。

但请注意,如果您创建不同的 3D 窗口,性能可能会很糟糕。据我所知,目前没有其他获取 3D 小部件的解决方案。

【讨论】:

  • 不错的答案。对this issue 有任何想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多