Dust3D开源项目分析——渲染与材质部分 | 纹理生成 Part1

本文详细分析了Dust 3D项目中的渲染和材质部分,指出其采用基于Qt的QOpenGL图形引擎,选择OpenGL ES 2.0以保证跨平台的可移植性。文章探讨了纹理类型、转换函数、纹理生成的核心功能,并重点介绍了TextureGenerator类的数据成员和关键函数。此外,还解释了如何整合Metalness、Roughness和AO贴图,以提高效率。
摘要由CSDN通过智能技术生成

 2021SC@SDUSC

        通过阅读源码文件和查阅相关资料,笔者发现Dust 3D使用的图形引擎是(基于Qt的)OpenGL,或者说QOpenGL。就Qt 5.0 而言,QOpenGL是建立在OpenGL ES(Embeded System) 2.0规范上的,可以说是OpenGL ES 3.0的弱化版本。事实上OpenGL ES 2.0是2004年发布的一个相当古老的版本,并不支持部分相对先进的OpenGL方法、数据格式、快捷算法等功能。笔者认为之所以选用2.0版本,一方面是因为Dust 3D是一个跨平台的开源项目,而OpenGL ES 2.0规范基本上被所有移动平台和现代PC平台支持,因此选用QOpenGL可以在很大程度上保证Dust 3D的可移植性,为跨平台开发提供更多便利。另一方面因为Dust 3D本身目的是借助辅助建模、辅助动画等功能加速游戏开发或影视制作流程,所以对渲染方面没有太多的要求,只需要保证软件的交互式操作视窗能够流畅运行即可,即使不用高版本的OpenGL方法也可以实现。

        由于渲染模块涉及到多个CPP源文件,笔者会结合不同文件之间的调用关系和重要性对这些文件展开分析。

代码分析

texturetype.h 和 texturetype.cpp

        Texturetype文件中定义了Dust 3D所使用的贴图类型和一些转换函数。根据枚举类TextureType,可知这些类型包括None-空类型、 BaseColor-颜色贴图(准确来说应该是Diffuse-漫射贴图)、Normal-法线贴图、Metallic-光泽度贴图、Roughness-粗糙度贴图、Ambient Occlusion-环境遮蔽贴图。Count在后面的函数暂时没有看到被使用,推测是用于计数之类的目的。

enum class TextureType
{
    None,
    BaseColor,
    Normal,
    Metallic,
    Roughness,
    AmbientOcclusion,
    Count
};

        头文件中有三个转换函数:QString TextureTypeToDispName(TextureType type),  const char *TextureTypeToString(TextureType type), TextureType TextureTypeFromString(const char *typeString),用途是TextureType类型和字符串的相互转换。

        其中TextureTypeToDispName()将TextureType类型转换成用于界面显示的字符串,调用了tr()函数,例如QObject::tr("Base Color")。tr()函数是Qt中软件国际化的核心功能,只要通过tr()传递将要显示在用户界面上的字符串,Qt就会根据用户的语言环境将字符串替换成翻译人员使用Qt Linguist做好本地化的版本。

        其他两个函数是将材质类型字符串和对应的枚举类型相互转换,功能比较简单,这里不再赘述。

QString TextureTypeToDispName(TextureType type)                     
{                                                                   
    switch (type) {                                                 
        case TextureType::BaseColor:                                
            return QObject::tr("Base Color");                       
        case TextureType::Normal:                                   
            return QObject::tr("Normal Map&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值