Animation, 3D development



  • Hi all,

    I am working on infotainment project, where i want to create a screen which will be showing the car's complete information, like fuel level, engine updates, tyre pressure etc for which i want to show a 3D car, which will show the engine through the transparent car,
    For ex the high end cars will be having these screens with the car image showing the engine and other info, Is it possible to create such screen using animation and 3D in Qml? if yes, How can i do that ? Is there any sample example for this ? Image for reference.

    alt text
    Thanks


  • Moderators

    Hi! Yes it's possible using Qt3D. KDAB has a few nice demos.

    dodge viper

    jet engine

    hyundai



  • @Wieland Thank you for the reply,
    Can get sample code for this? so that i can get more idea how to develop the 3D module
    Thank you.


  • Moderators

    Just ask them. KDAB website, twitter, facebook.



  • @Wieland Ok thank you :)



  • Hi,
    can anyone help me how to create and .obj object for 3D rendering and how to load it and display in Qml?

    for example, if i want to display on 3D car module how to do that ?
    Thanks in advance


  • Moderators

    Hi!

    @Naveen_D said in Animation, 3D development:

    can anyone help me how to create and .obj object

    You don't do that yourself but either buy ready-made models or pay a digital artist to create one specifically for you. Google "buy 3d models".

    how to load it and display in Qml?

    See Mesh QML Type,

    Mesh {
        id: mesh
        source: "cars/BMW/i8.obj"
    }
    


  • This post is deleted!

  • Moderators

    @Naveen_D said in Animation, 3D development:

    is there any open source from where i can take 3D models

    Maybe use google search?


  • Qt Champions 2016



  • @Wieland i tried with the following code:

    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Extras 2.0
    
    
    Mesh {
        id: mesh
        source: "qrc:/seat_leon.obj"
    }
    
    

    but didn't get the output. is there anything else i need to do for getting the output ?



  • @mrjj ya i got that thank you


  • Moderators

    Here's an almost minimal example in QML:

    GearEntity.qml

    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Input 2.0
    import Qt3D.Extras 2.0
    
    Entity {
        id: gearEntity
    
        Mesh {
            id: gearMesh
            source: "qrc:///assets/gear.obj"
        }
    
        Transform {
            id: gearTransform
            scale3D: Qt.vector3d(45, 45, 45)
            rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45)
        }
    
        PhongMaterial {
            id: gearMaterial
        }
    
        Entity {
            id: torusEntity
            components: [ gearMesh, gearTransform, gearMaterial ]
        }
    
    }
    

    RootEntity.qml

    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Input 2.0
    import Qt3D.Extras 2.0
    
    Entity {
        id: rootEntity
    
        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, 0.0 )
            viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
        }
    
        FirstPersonCameraController { camera: camera }
    
        components: [
            RenderSettings {
                activeFrameGraph: ForwardRenderer {
                    camera: camera
                    clearColor: "transparent"
                }
            },
            InputSettings {}
        ]
    
        GearEntity {}
    }
    

    main.qml

    import QtQuick 2.7
    import QtQuick.Window 2.3
    import QtQuick.Controls 2.0
    import QtQuick.Layouts 1.3
    import QtQuick.Scene3D 2.0
    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Extras 2.0
    
    ApplicationWindow {
        visible: true
        visibility: Window.Maximized
    
        Rectangle {
            anchors.fill: parent
            gradient: Gradient {
                GradientStop { position: 0.0; color: "blue" }
                GradientStop { position: 1.0; color: "grey" }
            }
        }
    
        Scene3D {
            id: scene3d
            anchors.fill: parent
            focus: true
            aspects: ["input", "logic"]
            cameraAspectRatioMode: Scene3D.AutomaticAspectRatio
            RootEntity {}
        }
    
        Button {
            text: "Exit"
            onClicked: Qt.quit()
        }
    }
    


  • @Wieland thank you... i got the output.
    I have one doubt, in the output when i try to rotate the object it is not rotating in the same place, instead the camera is rotating(i guess), is there any way to fix the camera and rotate the object in 360 deg ?
    Thank you


  • Moderators

    That's just how FirstPersonCameraController works. You could either implement your own camera controller or - instead of moving the camera - dynamically change gearTransform.



  • This post is deleted!


  • @Wieland

    You could either implement your own camera controller

    How i can develop my own camera controller is there any example for this ?



  • @Wieland
    I have made few changes in the code shared by you, what i have done is, Using blender software i have sliced the car obj for few diff parts like door, wheel, window, bonet etc and i have rearranged the whole car by adding the car parts in the code.
    Now when i try to add some animation for each of the part, for example i want the door to open and close as usual as it does normally, but what is happening,the door part is taking car body as the center and it is rotating inwards in the given angle. how can i change this to make it work properly.
    here is the code,

    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Input 2.0
    import Qt3D.Extras 2.0
    import QtQuick 2.5
    
    Entity {
        id: carFrontLeftDoorEntity
    
        Mesh {
            id: carFrontLeftDoorMesh
            source: "qrc:/Meshes/Car_FrontLeftDoor.obj"
        }
    
        Transform {
            id: carFrontLeftDoorMeshTransform
            scale3D: Qt.vector3d(1.5,1.5,1.5)
            rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 1), 30)
            rotationY: 0
    
            SequentialAnimation {
                loops: Animation.Infinite
                running: true
                NumberAnimation {
                    target: carFrontLeftDoorMeshTransform
                    property: "rotationY"
                    from: 0; to: 15
                    duration: 2000
                    easing.type: Easing.InOutQuad
                }
            }
        }
    
        PhongMaterial {
            id: carFrontLeftDoorMeshMaterial
            ambient: Qt.rgba( 0.0,0.0,0.0, 0.6 )
            diffuse: Qt.rgba( 0.3, 0.0, 128, 0.2 )
        }
    
        Entity {
            id: carFrontLeftDoorMeshtorusEntity
            components: [ carFrontLeftDoorMesh, carFrontLeftDoorMeshTransform, carFrontLeftDoorMeshMaterial ]
        }
    }
    

    this i have added in the gearentity.qml as separate part.

    Entity {
        id: gearEntity
    
        CarRawBody{}
    
        CarFrontGlass{}
    
        CarBonet{}
    
        CarDikki{}
    
        CarFrontLeftWheel{}
    
        CarRearLeftWheel{}
    
        CarFrontLeftDoor{}
    
        CarRearLeftDoor{}
    
        CarFrontLeftWindow{}
    
        CarRearLeftWindow{}
    }
    


  • hi, any updates on the above query ?
    Thank you


  • Moderators

    Hi! Sorry, that it already just too complex / incomplete for me to test and help with. Can you boil it down to a simpler question or a minimal runnable example that I - or anyone else who reads this - can use to reproduce the issue?



  • @Wieland ya sure.. i will reproduce it and post the example code..
    Can you please guide in the following issue also
    Thank you.
    https://forum.qt.io/topic/84633/camera-rotation-around-a-mesh



  • @Wieland Hi,
    I have few doubts regarding rotating an object in 3D,
    For ex, i have a car model, which i have sliced in blender, to get door as a separate object and whole car as a separate object, i have exported both as .obj files and i have assembled them in the code.
    Now what is happening, when i try to rotate the door which is separate object using number animation, it is rotating with respect to car's origin not w.r.t to door's so, i want to rotate it based on it's own axis or origin. not w.r.t car's origin.
    I have tried the following code but didn't get the excepted result.

        // Car front door //
        Mesh {
            id: carDoorMesh
            source: "qrc:/Meshes/CarFrontDoor_modified.obj"
        }
    
        PhongMaterial{
            id: carDoorMaterial
        }
    
        Transform {
            id: carDoorTransform
            property real userAngle: 0.0
    
            matrix: {
                var m= Qt.matrix4x4();
                m.translate(Qt.vector3d(0.501096,1.5006,1.78036))
                m.rotate(userAngle, Qt.vector3d(0,1,0))
                m.translate(Qt.vector3d(-0.501096,-1.5006,-1.75036))
                return m
            }
             NumberAnimation on rotationY {
                        to: -45
                        duration: 1000
                        running: true
                    }
    }
    

    i got the respective values from blender.
    Any guidance is appreciated
    Thank you.


  • Moderators

    @Naveen_D No offense, but this has nothing to do with Qt really but only with your lack of a basic understanding of how transformation matrices work. Seriously, get a book on linear algebra or you'll never get this to work.



  • @Wieland Hi,
    If i want to give color animation for a particular part of the 3d object, here for eg, car tire or door etc how can i do that? i want to show color animation for car tire, from existing color to red and back to same color and once started, it should be running continuously.
    I tried with the following code within transform, but didn't get the result

    Transform{
                        id: frontRightDoorWheelTireTransform
                        property real userAngle: 0.0
                        property real userDistance: 0.0
                        matrix: {
                            var m= Qt.matrix4x4();
                            m.translate(0.57005,-0.462196,-2.27110)
                            m.rotate(userAngle,Qt.vector3d(1,0,0))
                            m.translate(-0.57005,0.462196,2.27110)
                            return m;
                        }
                        translation: Qt.vector3d(userDistance,0,0)
    
                        ColorAnimation {
                            id: frontRightDoorWheelTireAnimation
                            from: "#171512"
                            to: "red"
                            duration: 2000
                            running: true
                        }
    
                    }
    

    Thank you,
    Naveen



  • Any updates on the above query.. ?
    Thank you.


  • Moderators

    What makes you think that you could apply a color animation to a spatial transformation? That doesn't make any sense.



  • @Wieland Ok thank you...

    1. one more thing, i have a scene 3D function in which i am rendering my car entity, but i am not able to rotate it, when it runs the object is still at one place i am not able to move it. can you please guide me through this
      here is the code
    import QtQuick 2.5
    import Qt3D.Core 2.0
    import Qt3D.Render 2.0
    import Qt3D.Input 2.0
    import Qt3D.Extras 2.0
    import QtQuick.Scene3D 2.0
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.4
    import QtQuick.Layouts 1.1
    
    ApplicationWindow {
        id: appWindow
        visible: true
        width: Screen.width
        height: Screen.height
    
        Rectangle {
            width: parent.width
            height: parent.height
            color: "Transparent"
    
            // 3D scene
            Scene3D {
                id: scene3d
                anchors.fill: parent
                aspects: "input"
    
                Entity {
                    id: root
    
                    components: [
                        RenderSettings {
                            activeFrameGraph: ForwardRenderer {
                                clearColor: "#0D8EA2"
                                camera: camera
                            }
                        },
                        InputSettings { }
                    ]
    
                    Camera {
                        id: camera
                        property real topPosition: 3.0
                        property real topPos: 0.5
                        projectionType: CameraLens.PerspectiveProjection
                        fieldOfView: 25
                        nearPlane : 0.1
                        farPlane : 1000.0
                        position: Qt.vector3d( 15.0, topPosition, 20.5)
                        upVector: Qt.vector3d(0.0,1.0,0.0)
                        viewCenter: carBodySlicedTransform.translation
                    }
    
                    OrbitCameraController {camera: camera}
                    // car Base
                    Mesh{
                        id: baseMesh
                        source: "qrc:/Meshes/CarBase.obj"
                    }
                    PhongAlphaMaterial{
                        id: baseMaterial
                        diffuse: "#7bc0ce"
                        alpha: 1.0
                    }
                    Transform{
                        id: baseTransform
                        translation: Qt.vector3d(0.0,-1.0,0.0)
                    }
    
                    // car Body sliced
                    Mesh {
                        id: carBodySlicedMesh
                        source: "qrc:/Meshes/CarBodySliced.obj"
                    }
    
                    PhongAlphaMaterial {
                        id: carBodySlicedMaterial
                        shininess: 500.0
                        specular: "#62788d"
                        diffuse: "#62788d"
                        alpha: 1.0
                    }
    
                    Transform {
                        id: carBodySlicedTransform
                        property real userAngle: 0.0
                        property real userDistance: 0.0
                        property real xAngleValue: 0.0
                        property real yAngleValue: 0.0
                        property real zAngleValue: 0.0
                        matrix: {
                            var m = Qt.matrix4x4();
                            m.rotate(userAngle, Qt.vector3d(xAngleValue, yAngleValue, zAngleValue));
                            m.translate(Qt.vector3d(userDistance, 0, 0));
                            return m;
                        }
                        translation: Qt.vector3d(0.0,0.0,0.0)
                        NumberAnimation on rotationY {
                            id: carAnimation
                            to: 360
                            duration: 5000
                            running: false
                        }
                    }
    
                    // main car body entity
                    Entity {
                        id: carMainEntity
                        components: [ carBodySlicedMesh, carBodySlicedMaterial, carBodySlicedTransform ]
                        // car base entity
                        Entity{
                            id: carBaseEntity
                            components: [baseMesh, baseMaterial, baseTransform]
                        }
                    }
                }
            }
        }
    
    1. Also i want to know how to apply animation to zoom the car based certain condition for eg: if i want to show the engine part of the car then i want to zoom the car towards that particular part in show it using animation.
      Thank you

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.