Cocos2d-x 3.x 图形学渲染系列十八

来源:互联网 发布:sql怎么打开mdf文件 编辑:程序博客网 时间:2024/05/15 06:14

笔者介绍:姜雪伟IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

本章主要介绍3D模型的材质渲染,虽然Cocos2d-x引擎自身提供了一些Shader材质渲染,但是如果用其开发产品是远远不够的,需根据项目需求再增加一些Shader作为材质渲染,针对模型的材质渲染,用的最多的还是模型的高光、法线、反射、环境映射等这些效果表现。掌握了这些Shader的编写,基本上解决了大部分的材质渲染效果,不论什么引擎,图形学算法的实现原理都是一样的,只是需要开发者将其对应的用不同的编程语言实现出来而已。在实现模型渲染材质之前,首先要把模型加载显示出来。

Cocos2d-x引擎使用的模型格式是通过fbx-conv工具将fbx模型文件格式转化成c3b或者c3t格式,这两种格式都可以包含骨骼动画,另外Cocos2d-x引擎也支持加载obj格式,它是不需要工具转化的,可以直接利用Max工具导出使用,缺点是obj文件格式不包含动作信息,所以使用的比较少,只可用于测试模型。

     c3b文件格式是二进制的,内容无法具体查看,而c3t是json文件格式,可以清楚的看到其内部结构。先介绍模型的转化过程,先用max工具导出fbx文件格式,然后使用工具fbx-conv将其转化成项目所需的c3t或者c3b模型格式,如果需渲染模型材质的高光、法线等效果,从max工具导出模型时,参数选项如下图:

这样可保证导出的模型具有法线和切线信息,法线的计算是在切向量空间进行的。在图10-1中默认时如果不选择Tangents and Binormals这一项,导出的模型格式c3t,其二者是不同的,只截取关键的部分数据如下图:


在上图中“attributes”这一项中有:

VERTEX_ATTRIB_POSITION位置属性、

VERTEX_ATTRIB_NORMAL顶点法线属性、

VERTEX_ATTRIB_TEX_COORD纹理坐标属性。上文已经提到过法线的计算需要在切向量空间中。而导出的数据没有切向量数据,这为计算增加了难度,需要程序自己编码实现,如果选中Tangents and Binormals这一项,在导出时在命令行中加入-p,执行转化如下图:


执行该命令行后重新导出的模型数据格式如下:


在上图中可以看到在属性attributes中增加了两项:

VERTEX_ATTRIB_TANGENT切向量、

VERTEX_ATTRIB_BINORMAL顶点次法线,在这里给读者解释一下什么是顶点次法线,见下图:



图中的三个轴向B表示顶点A的次法线、轴向T表示顶点A的切线、轴向N表示顶点A的法线。这三个轴T,N,B两两正交,组成了一个切线空间矩阵TBN,如下所示:

这个矩阵非常重要,在高光、法线计算中都会用到该矩阵,在后面的章节中会详细介绍,另外经过加密的c3b模型文件内容是二进制的,这里就不给大家展示了,接下来开始讲解模型加载。




1 0
原创粉丝点击