1.osg之创建一个球
1.源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <osgViewer/Viewer>
#include <osg/Geode>
#include <osg/ShapeDrawable>
int main()
{
// 创建一个Viewer对象,这是OSG的主要接口
osgViewer::Viewer viewer;
// 创建一个用于绘制形状的Geode节点
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
// 创建一个球体,设置其半径为1.0,然后添加到Geode节点
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(), 1.0)));
// 将Geode节点添加到场景图中
viewer.setSceneData(geode.get());
// 开始渲染循环
return viewer.run();
}
2.说明
其中比较难理解的是
1
2
// 创建一个球体,设置其半径为1.0,然后添加到Geode节点
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(), 1.0)));
这行代码的目的是在场景中添加一个可以绘制的形状。让我们一步步来看:
new osg::Sphere(osg::Vec3(), 1.0)
:这部分代码创建了一个新的球体对象。osg::Sphere
是一个类,它的构造函数接受两个参数:球心的位置和半径。在这里,我们使用osg::Vec3()
创建了一个新的向量,它的所有分量(x,y,z)都被初始化为0,所以球心位于原点。球体的半径被设置为1.0。new osg::ShapeDrawable(...)
:这部分代码创建了一个新的ShapeDrawable对象。ShapeDrawable是一个可以绘制形状的类,它的构造函数接受一个形状对象作为参数。在这里,我们传入了我们刚刚创建的球体对象。geode->addDrawable(...)
:最后,我们调用了Geode对象的addDrawable
方法,将我们刚刚创建的ShapeDrawable对象添加到Geode中。这样,当OSG渲染这个Geode时,它就会绘制我们的球体。
总的来说这行代码创建了一个位于原点、半径为1.0的球体,并将其添加到了我们的场景中
本文由作者按照 CC BY 4.0 进行授权