我对“ 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)
}
答案 0 :(得分:0)
在示例中,使用类Viewport和CameraSelector创建了四个视图。
视口类
类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小部件。