Qt 3D的研究(三):显示3D模型

时间:2024-03-19 14:02:34

Qt 3D的研究(三):显示3D模型

转自@http://blog.csdn.net/gamesdev/article/details/43964499

       我们接下来要使用Qt 3D将一个模型显示出来。Qt 3D内置了obj模型的解析器,可以很方便地导入obj格式的模型。如果想要使用Qt 3D导入ms3d、3ds这样格式的文件,可能需要将Assimp模型解析库和Qt 3D放在一起进行编译,这样才能够顺利地使用。这里我们采用Qt 3D内置的obj模型toyplane来载入并且显示。代码如下:

 

 
  1. import Qt3D 2.0

  2. import Qt3D.Render 2.0

  3.  
  4. Entity

  5. {

  6. id: root

  7.  
  8. Camera

  9. {

  10. id: camera

  11. position: Qt.vector3d( 0.0, 0.0, 40.0 )

  12. projectionType: CameraLens.PerspectiveProjection

  13. fieldOfView: 45

  14. aspectRatio: 16.0 / 9.0

  15. nearPlane : 0.1

  16. farPlane : 1000.0

  17. upVector: Qt.vector3d( 0.0, 1.0, 0.0 )

  18. viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )

  19. }

  20.  
  21. components: FrameGraph

  22. {

  23. ForwardRenderer

  24. {

  25. clearColor: Qt.rgba( 0, 0, 0, 1 )

  26. camera: camera

  27. }

  28. }

  29.  
  30. //! [3]

  31. Entity

  32. {

  33. Mesh

  34. {

  35. id: mesh

  36. objectName: "cube"

  37. source: "qrc:/toyplane.obj"

  38. }

  39.  
  40. components: [ mesh ]

  41. }

  42.  
  43. Configuration

  44. {

  45. controlledCamera: camera

  46. }

  47. //! [3]

  48. }

       这里![3]的部分就是我们新添加的部分。我们需要使用另外的一个Entity来表示我们要渲染的实体。然后这个实体中包含了Mesh。其中这个Mesh由"qrc:/toyplane.obj"这个路径载入。接着设定了components为[ mesh ],表示让Entity拥有的组件是名为mesh的Mesh component。最后的Configuration表示了程序的相关配置。其中我们要对camera进行交互操作,因此我们设定controlleedCamera为我们的camera,这样我们可以使用鼠标将camera的参数进行相应的改变,从而可以从不同的角度来观察模型了。

       程序截图如下所示:

Qt 3D的研究(三):显示3D模型

       需要说明的是,我们并没有指定光照和材质。我们的玩具飞机模型的土色渲染效果是Qt 3D默认给我们带来的。程序可以通过鼠标进行交互:左键表示以相机向上的向量为轴,对相机进行旋转;右键是以场景原点为中心点,对相机进行旋转。