Qt 3D的研究(四):指定渲染的材质以及效果

Qt 3D的研究(四):指定渲染的材质以及效果

       在上一篇文章中我了解到了怎样简单地显示模型。Qt3D内置了一个obj模型的解析器,这样可以将简单的obj模型载入并且显示出来。其实Qt3D对于渲染的配置还是很厉害的,通过设定材质,我们可以得到很不错的渲染效果,而且可以通过设定Effect,将自己指定的着色器载入,让Qt 3D和OpenGL进行编译,得到自己想要的渲染效果。

蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/43983493。欢迎同行前来探讨。

       在上一篇文章介绍的QML代码的基础上,我们简单地添加一个材质。代码如下:

    Entity
    {
        Mesh
        {
            id: mesh
            objectName: "toyPlane"
            source: "qrc:/toyplane.obj"
        }

        //! [4]
        PhongMaterial
        {
            id: phongMaterial
        }
        //! [4]

        components: [ mesh, phongMaterial ]
    }

       运行结果如下:

       这里我们在//! [4]之间添加了一个常用的材质:Phong材质。Phong光照模型是一种常见的光照模型,他揭示了生成高光的方法。以前我的博客也介绍并且实现了这样的光照模型。之所以它的广泛性,Qt 3D将其封装了一个类,方便操作。图中显示的是使用Phong光照模型,让玩具飞机呈现光滑透明的效果。我们也可以设定具体的参数,让光照呈现不同的效果:设定全局光(ambient)、漫反射(diffuse)、镜面反射(specular)以及自发光亮度(shininess)。添加的代码如下所示:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt3D加载 obj 模型并设置材质的示例代码如下: ```cpp // 创建一个 Entity 用于加载模型 Qt3DCore::QEntity *modelEntity = new Qt3DCore::QEntity(); // 创建一个 Mesh 用于存储模型数据 Qt3DRender::QMesh *modelMesh = new Qt3DRender::QMesh(); modelMesh->setSource(QUrl::fromLocalFile("path/to/your/obj/model")); // 创建一个 Material 用于设置模型材质 Qt3DExtras::QDiffuseMapMaterial *modelMaterial = new Qt3DExtras::QDiffuseMapMaterial(); modelMaterial->setDiffuse(QUrl::fromLocalFile("path/to/your/texture/image")); // 将 Mesh 和 Material 添加到 Entity 中 modelEntity->addComponent(modelMesh); modelEntity->addComponent(modelMaterial); // 将 Entity 添加到场景中 Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity(); rootEntity->addChild(modelEntity); // 创建一个视角摄像机并设置其位置和方向 Qt3DRender::QCamera *cameraEntity = view->camera(); cameraEntity->setPosition(QVector3D(0, 0, 40)); cameraEntity->setViewCenter(QVector3D(0, 0, 0)); // 创建一个渲染视图并设置其场景和摄像机 Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow(); Qt3DExtras::QForwardRenderer *renderer = new Qt3DExtras::QForwardRenderer(); renderer->setCamera(cameraEntity); view->setRootEntity(rootEntity); view->setActiveFrameGraph(renderer); ``` 其中,`QMesh` 类用于存储模型数据,`QDiffuseMapMaterial` 类用于设置模型材质。在示例代码中,我们通过 `setSource` 方法加载 obj 模型文件,通过 `setDiffuse` 方法设置纹理图片。最后,将 Mesh 和 Material 添加到 Entity 中,再将 Entity 添加到场景中,最终显示出模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值