CityMaker 8二次开发之IDrawPrimitive是什么?

IDrawPrimitive是什么?

按照CityMaker帮助文档的表述及注释表述如下:

1)IDrawPrimitive:绘制单元,用于存储绘制的材质,可获取和设置颜色数组绘制模式和类型。

2)IDrawPrimitive表示一个绘制单元,一个DrawPrimitive对应一种材质Material,对应一个顶点数组。


IDrawPrimitive是CityMaker平台对模型的组织的基础,有必要对IDrawPrimitive进行深入的研究,那么IDrawPrimitive究竟是什么?

我们来做一个试验:

1)准备一个Box,其中,有三个面赋予第一种材质,另外二个面赋予第二种材质,有一个面赋予第三种材质,如下图所示:

CityMaker 8二次开发之IDrawPrimitive是什么?

2)编写测试程序,获取每个IDrawPrimitive的节点数组。(测试程序略,此处只为了说明问题)

CityMaker 8二次开发之IDrawPrimitive是什么?


从结果分析来看,我们得出以下结论:

1)一个绘制单元,指的是一个模型中,赋予相同材质的面的集合。Box的面有6个,3种材质,但只弹出3组结果(12/2=6个UV坐标),说明相同材质的被认为是同一种类型,也就是一个绘制单元。

2)在CityMaker中,基本构成要素为三角面,每个点都赋予了一个纹理坐标(UV)。从第一个结果来看,显示是一个面的情况,一个面有18/3=6个点,构成的基本要素。从纹理数组来看,每个三角面上的点都赋有纹理数组。把这个模型导出成FBX就很清楚了:

CityMaker 8二次开发之IDrawPrimitive是什么?

我们给模型的某个面赋予贴图时,应该设置几组纹理坐标呢?应该如何计算?这里的结论很清楚的说明了问题。

我们应该如何创建一个面呢?这里的结论很清楚了,创建多少个节点数组,应该如何构成。

3)节点构成的顺序:

我们还必须做一个测试,标记出点号(代码略)

CityMaker 8二次开发之IDrawPrimitive是什么?

我们把结论画出来:

CityMaker 8二次开发之IDrawPrimitive是什么?


节点的顺序决定了面的方向,出现反面的情况(法线相反),也就是因为节点顺序相关的缘故(你现在应该知道如何翻转法线了吧?调整节点的顺序哦)

节点的顺序可以由你创建时指定,当然也有来自其它的,比如polygon,但是polygon的外环节点构成顺序,citymaker创建的与arcmap创建的不一致,需要注意一下:在citymaker下,节点顺序与创建顺序一致,在arcmap中,节点顺序始终为顺时针。

CityMaker 8二次开发之IDrawPrimitive是什么?

CityMaker 8二次开发之IDrawPrimitive是什么?


---欢迎批评指正,转载请注明出处和作者QQ:3133952829