Базовый пример QML 3D - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь создать базовое приложение QML, которое будет загружать 3D-модель из файла .obj, отображать ее на экране и иметь возможность вращать ее вдоль своих осей во время выполнения.Я просмотрел некоторые примеры Qt и нашел код ниже - большая часть которого была заимствована из рабочих примеров.Но когда я запускаю его, модель не отображается должным образом.

Фактическая модель выглядит следующим образом:

enter image description here

, и в настоящее время мое приложение показываетвверх как

this.

Вот код QML -

import Qt3D.Core 2.12
import Qt3D.Render 2.12
import Qt3D.Extras 2.12

Entity {
    id: sceneRoot

    Camera {
        id: camera
        projectionType: CameraLens.PerspectiveProjection
        fieldOfView: 45
        aspectRatio: 1820 / 1080
        nearPlane: 0.1
        farPlane: 1000.0
        position: Qt.vector3d(0.014, 0.956, 2.178)
        upVector: Qt.vector3d(0.0, 1.0, 0.0)
        viewCenter: Qt.vector3d(0.0, 0.7, 0.0)
    }

    Entity {
        components: [
            DirectionalLight {
                intensity: 0.9
                worldDirection: Qt.vector3d(0, 0.6, -1)
            }
        ]
    }

    RenderSettings {
        id: external_forward_renderer
        activeFrameGraph: ForwardRenderer {
            camera: camera
            clearColor: "transparent"
        }
    }

    Mesh {
        id: roboMesh
        source: "images/robo-obj-pose4/source/d2f0cff60afc40f5afe79156ec7db657.obj"
    }

    Entity {
        id: circleEntity
        property Material roboMaterial: PhongAlphaMaterial {
            alpha: 0.4
            ambient: "black"
            diffuse: "black"
            specular: "black"
            shininess: 10000
        }

        components: [roboMesh, roboMaterial]
    }
}

Что мне здесь не хватает?Извините за действительно глупый вопрос, но я совершенно новичок в Qt3D и не понимаю, что еще нужно добавить в мой код.

1 Ответ

0 голосов
/ 05 марта 2019

Вам не обязательно нужен файл материала, как это предлагается в комментариях, вы можете назначить типовые материалы так, как вы это делаете, у вас просто есть некоторые другие проблемы с вашим кодом.

Во-первых, вам нужно добавитьRenderSettings в качестве компонента сущности root , например:

Entity {
    id: sceneRoot

    components: [external_forward_renderer]

    ...

Во-вторых, "transparent" не является допустимым чистым цветом.Используйте что-то вроде Qt.rgba(0, 0.5, 1, 1).

В-третьих, вам нужно добавить file:// в начало URL-адреса сетки, если только вы не включили файл в файл ресурсов.По крайней мере, мне нужен был этот префикс, а может и нет.Вы можете проверить это, посмотрев выходные данные приложения в QtCreator.Если написано «файл не существует», добавьте этот префикс.

Если вы все еще не видите свою сетку, попробуйте добавить InputSettings (который также должен быть добавлен как компонент) и OrbitCameraController:

InputSettings {
    id: inputSettings
}

OrbitCameraController{
    camera: camera
}
...