QT3D多视图-小部件中的单个视图

时间:2018-11-24 17:52:47

标签: qt qt3d

我对“ 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)
}

1 个答案:

答案 0 :(得分:0)

在示例中,使用类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类

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

结论

如果只需要一个视图,请移除主Viewports中的四个Viewport并添加一个相机选择器作为它的子选择器。因此,您的QuadViewportFrameGraph应该看起来像这样(没有import语句):

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小部件。