osgGeometry.VertexArray转化为相对世界的位置
时间: 2024-02-03 17:14:02 浏览: 93
vp_color_table.rar_esprit_lynx prime_objects_vertex array
要将 `osg::VertexArray` 转换为相对于世界的位置,您需要进行以下操作:
1. 获取顶点数组的数量 `numVerts`。
2. 获取顶点数组 `vertices`。
3. 获取节点的世界矩阵 `worldMatrix`。
4. 遍历顶点数组,将每个顶点乘以节点的世界矩阵。这样就可以将顶点从局部坐标系转换为世界坐标系。
以下是示例代码:
```cpp
osg::ref_ptr<osg::Node> node = ...; // 获取节点
// 获取顶点数组
osg::ref_ptr<osg::Geometry> geom = dynamic_cast<osg::Geometry*>(node->getDrawable(0));
osg::ref_ptr<osg::Vec3Array> vertices = dynamic_cast<osg::Vec3Array*>(geom->getVertexArray());
unsigned int numVerts = vertices->getNumElements();
// 获取节点的世界矩阵
osg::Matrix worldMatrix = osg::computeLocalToWorld(node->getParentalNodePaths()[0]);
// 遍历顶点数组,将每个顶点乘以节点的世界矩阵
for (unsigned int i = 0; i < numVerts; ++i)
{
osg::Vec3f& vert = (*vertices)[i];
vert = vert * worldMatrix;
}
```
这样,您就可以将 `osg::VertexArray` 转换为相对于世界的位置。
阅读全文