CityMaker 8二次开发之顶点数组(IFloatArray)的构成

IFloatArray是api中用于存储数组的一个接口。

IFloatArray如何构成?举个栗子就明白了。如图:


这个点的FloatArray构成就是x=FloatArray.get(1),y=FloatArray.get(2),y=FloatArray.get(3),

如果你想遍历所有的节点,就必须这样操作:

List<IPoint> pts = new List<IPoint>();
IFloatArray arrayVector = drawPrimitive.VertexArray;
for (int n = 0; n < arrayVector.Length;)
{        
IPoint pt = ......;		
pt.X = arrayVector.Get(n);	
pt.Y = arrayVector.Get(n + 1);	
pt.Z = arrayVector.Get(n + 2);		
pts.Add(pt);		
n = n + 3;
}

IFloatArray用作TexcoordArray存储时,2个数值来表达纹理坐标,如:

List<IPoint> texPts = new List<IPoint>();
IFloatArray arrayVector = drawPrimitive.TexcoordArray;
for (int n = 0; n < arrayVector.Length;)
{
        IPoint pt = ......;
	
	pt.X = arrayVector.Get(n);
	pt.Y = arrayVector.Get(n + 1);
	
	texPts.Add(pt);
	
	n = n + 2;
}

注意:

图像上的位置长宽两个方向都是0到1的长度,比如对应图像最中间的位置,相应的纹理坐标就是0.5,0.5;


所谓贴图,就是将在模型的某个面上的节点,设置合适的纹理坐标。看上图就很清楚了,给模型上每个点设置合适的TexcoordArray(设置IDrawPrimitive.TexcoordArray)。

特别注意一下,这个TexcoordArray(2个数)顺序与VertexArray(3个数)顺序是一致的。

猜你喜欢

转载自blog.csdn.net/bdbox/article/details/80665870