osg.Array是OpenSceneGraph中的一个类,用于维护一组连续的数据,并提供基本的数组操作功能。它通常被用于表示一系列坐标、法向量、颜色等顶点属性数据,也可以用于保存任意类型的数据。
osg.Array有以下重要属性:
DataType
:用于指定数组的元素类型。可以选用的数据类型包括Char
(有符号字符)、UChar
(无符号字符)、Short
(有符号短整数)、UShort
(无符号短整数)、Int
(有符号整数)、UInt
(无符号整数)、Float
(单精度浮点数)、Double
(双精度浮点数)等。默认值为Float
。Size
:用于指定每个元素的大小(以字节为单位)。对于大多数数据类型,可以直接使用sizeof()
函数获取其大小;对于字符串类型,可以使用strlen()
函数获取其长度。默认值为1。NumElements
:用于指定数组中元素的数量。在构造时必须指定,一旦构造完成后不能再更改。Data
:指向数组元素的指针。可以通过getDataPointer()
方法获取。构造osg.Array对象的方式有以下几种:
使用指定的数据类型、元素数量和每个元素的大小构造一个osg.Array对象。例如:
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array(osg::Array::Float, 4);
使用另一个osg.Array对象的内容构造一个新的osg.Array对象。例如:
osg::ref_ptr<osg::Vec3Array> copy = new osg::Vec3Array(*vertices);
osg.Array提供以下常用方法:
获取指向数组数据的指针。例如:
float* data = vertices->getDataPointer();
data[0] = 1.0f;
data[1] = 2.0f;
data[2] = 3.0f;
data[3] = 4.0f;
获取数组中元素的数量。例如:
const unsigned int numVertices = vertices->getNumElements();
获取每个元素的大小(以字节为单位)。例如:
const unsigned int bytesPerVertex = vertices->getNumBytesPerElement();
获取数组的元素类型。例如:
const osg::Array::DataType type = vertices->getDataType();
获取整个数组所占用的内存大小(以字节为单位)。例如:
const unsigned int bufferSize = vertices->getTotalDataSize();
OpenSceneGraph中定义了若干种常见的数组类型,它们都继承自osg.Array类,但具有不同的元素类型和元素个数:
这些数组类型提供了许多特殊的方法,方便对其中的数据进行操作。例如:
osg::Vec3Array* vertices = new osg::Vec3Array(4);
vertices->set(0, osg::Vec3(0, 0, 0));
vertices->set(1, osg::Vec3(1, 0, 0));
vertices->set(2, osg::Vec3(0, 1, 0));
vertices->set(3, osg::Vec3(0, 0, 1));