Search code examples
pythonpyqtqmlpyqt5qt3d

why FirstPersonCameraController {camera: camera } not working with QML ApplicationWindow?


I am loading a QML 3D scene from PyQT5 within an ApplicationWindow. however, I am not able to pan and rotate my custom model with the mouse.

import QtQuick.Controls 2.5
import QtQuick.Scene3D 2.12

import Qt3D.Core 2.12
import Qt3D.Render 2.12
import Qt3D.Input 2.12
import Qt3D.Extras 2.13

import QtQuick 2.12 as QQ2

ApplicationWindow{   

    Scene3D {
            id: scene3d
            anchors.fill: parent
            anchors.margins: 10
            focus: true
            aspects: "input"

            FirstPersonCameraController {
                            camera: camera
                            }

            Entity {
                id: sceneRoot


                Camera {
                    id: camera
                    projectionType: CameraLens.PerspectiveProjection
                    fieldOfView: 45
                    nearPlane : 0.1
                    farPlane : 1000.0
                    position: Qt.vector3d( 0.0, 0.0, 40.0 )
                    upVector: Qt.vector3d( 0.0, 1.0, 1.0 )
                    viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )


                    PointLight{
                        id:pl3

                        }
                }



                ObjectPicker{
                  id: spherePicker
                  onPressed:{
                     console.log("Sphere clicked")
                  }
            }
                components: [
                    RenderSettings {
                        activeFrameGraph: ForwardRenderer {
                            camera: camera
                            clearColor: "transparent"
                        }
                    },
                    InputSettings { }
                ]

                PhongMaterial {
                    id: material
                    diffuse:Qt.rgba(0.5,0.5,0,1)
                }



                 PointLight{
                    id:pl2

                    }

               Mesh {
                    id: esh
                    source: "egg1.obj"

                    }

                Transform {
                    id: torusTransform
                    scale3D: Qt.vector3d(5, 5, 5)
                    rotation: fromAxisAndAngle(Qt.vector3d(1, 1, 0), 45)
                }

                Entity {
                    id: torusEntity
                    components: [ esh, material, torusTransform,spherePicker ]
                }

            }
        }


}

The model loads correctly just that I am not able to control it's rotation wit the mouse.

I am thinking this has got to do with the "FirstPersonCameraController"


Solution

  • I am not able to verify this myself at the moment but I assume you have to move your FirstPersonCameraController within your root entity called sceneRoot.

    Right now it is a child of the Scene3D. Try to move it below the Camera node and see if that works.

    By the way: I'm assuming that you mean you can't control the camera and that's what you want when you say

    The model loads correctly just that I am not able to control it's rotation wit the mouse.