2017-07-28 9 views
0

J'ai récemment commencé à apprendre Qt/QML/C++ et à essayer de créer une scène 3D très basique pour faire pivoter la caméra autour d'un objet maillé. Je trouve qu'il est très difficile de suivre les exemples et je trouve que la documentation ne fournit aucune instruction utile. Il ne semble pas y avoir beaucoup de tutoriels là-bas non plus, peut-être que je cherche dans les mauvais endroits.Qt3D faire pivoter la caméra autour du maillage

main.cpp

#include <Qt3DQuickExtras/qt3dquickwindow.h> 
#include <Qt3DQuick/QQmlAspectEngine> 

#include <QGuiApplication> 
#include <QtQml> 

int main(int argc, char **argv) 
{ 
    QGuiApplication app(argc, argv); 
    Qt3DExtras::Quick::Qt3DQuickWindow view; 

    // Expose the window as a context property so we can set the aspect ratio 
    view.engine()->qmlEngine()->rootContext()->setContextProperty("_window", &view); 
    view.setSource(QUrl("qrc:/main.qml")); 
    view.setWidth(800); 
    view.setHeight(600); 
    view.show(); 

    return app.exec(); 
} 

main.qml

import Qt3D.Core 2.0 
import Qt3D.Render 2.0 
import Qt3D.Input 2.0 
import Qt3D.Extras 2.0 

Entity { 
    id: sceneRoot 

    Camera { 
     id: camera 
     projectionType: CameraLens.PerspectiveProjection 
     fieldOfView: 25 
     aspectRatio: _window.width/_window.height 
     nearPlane : 0.1 
     farPlane : 1000.0 
     position: Qt.vector3d(0, 0.0, 20.0) 
     upVector: Qt.vector3d(0.0, 1.0, 0.0) 
     viewCenter: Qt.vector3d(0.0, 0.0, 0.0) 
    } 

    OrbitCameraController { 
     camera: camera 
    } 

    components: [ 
     RenderSettings { 
      activeFrameGraph: ForwardRenderer { 
       clearColor: Qt.rgba(0, 0.5, 1, 1) 
       camera: camera 
      } 
     }, 
     InputSettings { } 
    ] 

    PhongMaterial { 
     id: carMaterial 
    } 

    Mesh { 
     id: carMesh 
     source: "resources/aventador.obj" 
    } 

    Entity { 
     id: carEntity 
     components: [ carMesh, carMaterial ] 
    } 
} 

Comment puis-je obtenir la caméra pour tourner autour de l'objet de maille?

+0

Vous n'avez pas posé de question. Vous avez du code, jusqu'ici tout va bien. Y a-t-il des erreurs lors de la compilation? Ne fait-il pas ce que tu veux? Je ne peux pas répondre s'il n'y a pas de question. – Aziuth

+0

Définir le centre de la vue de la caméra comme étant le point que vous souhaitez faire pivoter? – peppe

Répondre

0

Le OrbitCameraController permet de déplacer la caméra le long d'une trajectoire orbitale. Pour le faire pivoter autour du maillage, vous pouvez définir le viewCenter de la caméra sur la position du maillage (translation de la transformée de l'entité contenant le maillage) et utiliser votre clavier/souris pour le faire pivoter.

ajouter donc:

Transform{ 
     id: carTransform 
     translation: Qt.vector3d(5.0, 5.0, 5.0) //random values, choose your own 
} 

et ajouter la transformation aux composants de l'entité. Modifier la vueCenter de la caméra à

viewCenter: carTransform.translation