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

24 篇文章 0 订阅
22 篇文章 0 订阅

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值