IDrawPrimitive是什么?
按照CityMaker帮助文档的表述及注释表述如下:
1)IDrawPrimitive:绘制单元,用于存储绘制的材质,可获取和设置颜色数组绘制模式和类型。
2)IDrawPrimitive表示一个绘制单元,一个DrawPrimitive对应一种材质Material,对应一个顶点数组。
IDrawPrimitive是CityMaker平台对模型的组织的基础,有必要对IDrawPrimitive进行深入的研究,那么IDrawPrimitive究竟是什么?
我们来做一个试验:
1)准备一个Box,其中,有三个面赋予第一种材质,另外二个面赋予第二种材质,有一个面赋予第三种材质,如下图所示:
2)编写测试程序,获取每个IDrawPrimitive的节点数组。(测试程序略,此处只为了说明问题)
从结果分析来看,我们得出以下结论:
1)一个绘制单元,指的是一个模型中,赋予相同材质的面的集合。Box的面有6个,3种材质,但只弹出3组结果(12/2=6个UV坐标),说明相同材质的被认为是同一种类型,也就是一个绘制单元。
2)在CityMaker中,基本构成要素为三角面,每个点都赋予了一个纹理坐标(UV)。从第一个结果来看,显示是一个面的情况,一个面有18/3=6个点,构成的基本要素。从纹理数组来看,每个三角面上的点都赋有纹理数组。把这个模型导出成FBX就很清楚了:
我们给模型的某个面赋予贴图时,应该设置几组纹理坐标呢?应该如何计算?这里的结论很清楚的说明了问题。
我们应该如何创建一个面呢?这里的结论很清楚了,创建多少个节点数组,应该如何构成。
3)节点构成的顺序:
我们还必须做一个测试,标记出点号(代码略)
我们把结论画出来:
一个三角面对应三组UV值,在上图中(仅针对上图),IFloatArray应该为 (0,0) (1,0) (1,1) (1,1) (0,1) (0,0)
节点的顺序决定了面的方向,出现反面的情况(法线相反),也就是因为节点顺序相关的缘故(你现在应该知道如何翻转法线了吧?调整节点的顺序哦)
节点的顺序可以由你创建时指定,当然也有来自其它的,比如polygon,但是polygon的外环节点构成顺序,citymaker创建的与arcmap创建的不一致,需要注意一下:在citymaker下,节点顺序与创建顺序一致,在arcmap中,节点顺序始终为顺时针。
---欢迎批评指正,转载请注明出处和作者
---------------------------------------------------------------------------
承接CityMaker各类二次开发、数据生产、数据加工处理等服务。
有意者请联系QQ:gispar@qq.com