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个数)顺序是一致的。