osg::GEOMETRY 表示点的代码
时间: 2023-08-06 15:03:30 浏览: 110
计算机图形学点代码
以下是一个简单的例子,演示如何使用 osg::Geometry 表示点:
```cpp
#include <osg/Geode>
#include <osg/Geometry>
osg::ref_ptr<osg::Geometry> createPointGeometry(const osg::Vec3& point)
{
// 创建一个 osg::Geometry 对象
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
// 创建一个 osg::Vec3Array 用于存储顶点数据
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
vertices->push_back(point); // 添加一个点坐标
// 将顶点数据设置给 geometry 对象
geometry->setVertexArray(vertices.get());
// 创建一个 osg::DrawArrays 对象,用于绘制点图元
osg::ref_ptr<osg::DrawArrays> drawArrays = new osg::DrawArrays(osg::PrimitiveSet::POINTS, 0, 1);
// 将绘制命令添加到 geometry 对象中
geometry->addPrimitiveSet(drawArrays.get());
// 返回创建的 geometry 对象
return geometry;
}
int main()
{
// 创建一个 osg::Geode 对象
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
// 创建一个点的 osg::Geometry 对象
osg::ref_ptr<osg::Geometry> pointGeometry = createPointGeometry(osg::Vec3(0, 0, 0));
// 将点的 geometry 对象添加到 geode 中
geode->addDrawable(pointGeometry.get());
// 创建一个 osgViewer::Viewer 对象,并设置场景图根节点为 geode
osgViewer::Viewer viewer;
viewer.setSceneData(geode.get());
// 运行 osgViewer
return viewer.run();
}
```
上述代码创建了一个包含一个点的 osg::Geometry 对象,并将其添加到了一个 osg::Geode 对象中,最后将该 geode 对象设置为场景图的根节点。运行程序后,应该可以看到一个点在屏幕中心的位置。
阅读全文