QT3D Multiview - 小部件中的单一视图
Posted
技术标签:
【中文标题】QT3D Multiview - 小部件中的单一视图【英文标题】:QT3D Multiview - Single View in Widget 【发布时间】: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 但我不知道如何显示单个视图(例如四个视图之一)。目前所有四个视图都显示在小部件内。如果我能解决这个问题,我想扩展它,所有四个视图都显示在四个单独的小部件中。 【参考方案1】:在示例中,四个视图是使用 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 类
这个类定义了框架图的分支使用哪个相机来渲染内容。如果您查看该示例,您将在每个 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 有任何想法吗?以上是关于QT3D Multiview - 小部件中的单一视图的主要内容,如果未能解决你的问题,请参考以下文章