天天看點

Qt 3D入門(二)

前面我們使用Qt 3D架構建立了一個最基本的3D程式,藍色的背景,裡面什麼也沒有。

現在,我們要在此基礎上把3D模型放進去。3D模組化的工具有很多,Auto CAD, 3DS Max,Rhino, Blender等等,有收費,有免費,不一而足,總有一款你會喜歡。 在學校不同的專業學的軟體可能不同,筆者是電子專業的,十幾年前在學校隻學過工程制圖,使用的是AutoCAD。但沒關系,我們要做的是編寫3D程式,模組化有時間再學吧。

Qt 3D内置了obj的模型解析器,能夠導入的是obj格式的3D模型,其它格式就需要轉換一下了。如果手頭沒有現成的模型,我們就直接使用Qt自帶的幾個模型做為例子。Qt的示例程式裡面帶了幾個模型,存放在下面這個目錄,我們把它拷出來,放到自己的工作目錄即可。

Examples\Qt-5.11.1\qt3d\exampleresources\assets\obj      

接下來,把toyplane.obj添加到我們的工程裡面,先在qml.qrc下添加一個prefix,/assets/obj,然後把toyplane.obj添加到此路徑下。

Qt 3D入門(二)

編輯main.qml檔案,添加以下内容:

1     Entity {
 2         id: topplane
 3  
 4         PhongMaterial {
 5             id: material
 6         }
 7  
 8         Mesh {
 9             id: toyplaneMesh
10             source: "qrc:/assets/obj/toyplane.obj"
11         }
12  
13         components: [toyplaneMesh, material]
14     }      

我們添加一個新的Entity來表示我們飛機模型實體,id為toyplane。然後這個實體中包含了一個Mesh對象。其中這個Mesh由"qrc:/assets/obj/toyplane.obj"這個路徑載入。還定義了一個PhongMaterial材質,Qt 3D沒有預設的材質,如果不定義材質的話,模型就顯示不出來。最後建立components為[ toyplaneMesh, material ],表示讓Entity擁有的元件是名為toyplaneMesh,材質為material的Mesh component。