2017-07-28 217 views
0

我最近開始學習Qt/QML/C++,並試圖構建一個非常基本的3D場景來圍繞網格對象旋轉相機。Qt3D圍繞網格旋轉相機

我發現很難遵循這些例子,我發現文檔沒有提供任何有用的說明。在那裏似乎也沒有太多的教程,也許我正在尋找錯誤的地方。

的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 ] 
    } 
} 

如何讓相機圍繞網格物體轉動?

+0

您還沒有提出任何問題。你有代碼,到目前爲止非常好。編譯時是否有錯誤?它不是做你想做的事嗎?如果沒有問題,不能回答。 – Aziuth

+0

將相機的視圖中心設置爲要旋轉的點? – peppe

回答

0

OrbitCameraController允許沿着軌道路徑移動相機。要使它圍繞網格旋轉,可以將攝像機的視圖中心設置爲網格的位置(轉換包含網格的實體的變換),然後使用鍵盤/鼠標旋轉它。

所以加:

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

,並添加轉化爲實體的部件。 將相機的視圖中心更改爲

viewCenter: carTransform.translation