文章

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)));

这行代码的目的是在场景中添加一个可以绘制的形状。让我们一步步来看:

  1. new osg::Sphere(osg::Vec3(), 1.0):这部分代码创建了一个新的球体对象。osg::Sphere是一个类,它的构造函数接受两个参数:球心的位置和半径。在这里,我们使用osg::Vec3()创建了一个新的向量,它的所有分量(x,y,z)都被初始化为0,所以球心位于原点。球体的半径被设置为1.0。
  2. new osg::ShapeDrawable(...):这部分代码创建了一个新的ShapeDrawable对象。ShapeDrawable是一个可以绘制形状的类,它的构造函数接受一个形状对象作为参数。在这里,我们传入了我们刚刚创建的球体对象。
  3. geode->addDrawable(...):最后,我们调用了Geode对象的addDrawable方法,将我们刚刚创建的ShapeDrawable对象添加到Geode中。这样,当OSG渲染这个Geode时,它就会绘制我们的球体。

总的来说这行代码创建了一个位于原点、半径为1.0的球体,并将其添加到了我们的场景中

本文由作者按照 CC BY 4.0 进行授权