QT3D Multiview - одиночный просмотр в виджете - PullRequest
0 голосов
/ 24 ноября 2018

У меня вопрос по поводу "Qt 3D: Пример Multi Viewport QML" Ссылка

Есть ли возможность добавить один вид (один из четырех в примере) вотдельный виджет.Я попытался изменить пример, но я мог добавить все четыре вида в один виджет.

Следующий код создает камеру, которая должна отображаться в отдельном виджете.см. рисунок

Я не уверен, возможно ли это и как я могу это решить.

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 голосов
/ 25 ноября 2018

В этом примере четыре вида создаются с использованием классов Viewport и CameraSelector .

Класс Viewport

Класс 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

Этот класс определяет, какую камеру использует ветвь framegraph для визуализации контента.Если вы посмотрите на пример, вы увидите CameraSelector { id: someCamera } в каждом Viewport экземпляре.Таким образом, каждый Viewport получает свою собственную камеру.

Заключение

Если вам нужен только один вид, удалите четыре Viewports из основного Viewportи добавить один селектор камеры в качестве дочернего элемента.Таким образом, ваш 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-виджетов нет.

...