1.用三维引擎创建一个球(代码+解析)

举报
无敌清风蓝 发表于 2023/11/30 08:59:47 2023/11/30
【摘要】 1.源码#include <osgViewer/Viewer>#include <osg/Geode>#include <osg/ShapeDrawable>int main(){ // 创建一个Viewer对象,这是OSG的主要接口 osgViewer::Viewer viewer; // 创建一个用于绘制形状的Geode节点 osg::ref_ptr<osg::Geode> geode...

1.源码

#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.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的球体,并将其添加到了我们的场景中

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。