Qt 3D的研究(三):显示3D模型
来源:互联网 发布:4g逛淘宝费流量么 编辑:程序博客网 时间:2024/04/18 12:37
Qt 3D的研究(三):显示3D模型
上一篇文章介绍了如何使用最少的代码创建一个Qt 3D的应用。和大家最初接触的glut一样,对于3D应用来说,需要做的准备工作还真不少,不过呢,Qt 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来载入并且显示。代码如下:
import Qt3D 2.0import Qt3D.Render 2.0Entity{ id: root Camera { id: camera position: Qt.vector3d( 0.0, 0.0, 40.0 ) projectionType: CameraLens.PerspectiveProjection fieldOfView: 45 aspectRatio: 16.0 / 9.0 nearPlane : 0.1 farPlane : 1000.0 upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) } components: FrameGraph { ForwardRenderer { clearColor: Qt.rgba( 0, 0, 0, 1 ) camera: camera } } //! [3] Entity { Mesh { id: mesh objectName: "cube" source: "qrc:/toyplane.obj" } components: [ mesh ] } Configuration { controlledCamera: camera } //! [3]}
这里![3]的部分就是我们新添加的部分。我们需要使用另外的一个Entity来表示我们要渲染的实体。然后这个实体中包含了Mesh。其中这个Mesh由"qrc:/toyplane.obj"这个路径载入。接着设定了components为[ mesh ],表示让Entity拥有的组件是名为mesh的Mesh component。最后的Configuration表示了程序的相关配置。其中我们要对camera进行交互操作,因此我们设定controlleedCamera为我们的camera,这样我们可以使用鼠标将camera的参数进行相应的改变,从而可以从不同的角度来观察模型了。
程序截图如下所示:
需要说明的是,我们并没有指定光照和材质。我们的玩具飞机模型的土色渲染效果是Qt 3D默认给我们带来的。程序可以通过鼠标进行交互:左键表示以相机向上的向量为轴,对相机进行旋转;右键是以场景原点为中心点,对相机进行旋转。
- Qt 3D的研究(三):显示3D模型
- Qt 3D的研究(一)
- Qt 3D的研究(二)
- Qt 3D教程(三)实现对模型材质参数的控制
- Qt 3D的研究(五):Gooch Shader
- Qt 3D的研究(六):Toon Shader
- Qt 3D的研究(七):渲染至纹理
- Qt 3D的研究(八):边缘检测
- Unity 3D 残影的研究 截取当前模型的网格材质并显示
- 面片上显示3D模型
- Qt 3D教程(二)初步显示3D的内容
- C# VS2012下的3D显示(三)
- OSG 显示3D模型以及对应模型切层的2D效果
- 【Qt OpenGL教程】05:3D模型
- Qt 3D的研究(四):指定渲染的材质以及效果
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
- Qt 3D的研究(九):尝试另外一种边缘检测方法
- Unity3D -- 3D Text对模型的穿透显示
- BAT当前文件符
- 甘肃康婷网络直销好做吗?赚钱吗?
- Oracle SET UNUSED的用法
- 红包抢不到怎么办?——CSDN感恩回馈,C币充值巨优惠!
- oracle怎样卸载干净(不用在重做系统了)
- Qt 3D的研究(三):显示3D模型
- MySQL遇到的小问题
- UITextfiel 网上找的比较全面的资料
- 栈的一些简单操作
- Android Service 的几个用途
- sqlite分页查询
- 十六进制转换成十进制
- Runnable和Thread实现多线程的区别(含代码)
- 基于mini5350的WIFI视频小车