OpenScenceGraph

#osg的第一次邂逅
今天写一点感言,毕竟刚刚学着写博客,恰好刚刚学习osg,所多说点感想算是给我未来程序员生涯立下一个flag。
放假遇上疫情,却很偶然的收到一份offer,就是关于osg的,于是不要命的匆匆赶来了,自然按流程就要在家呆14天,可实习还是要学习的,干我们这行,遇到了不都要学嘛,难道不都这样吗,反正我已经习惯了,小组长在群里发了很多资料,今天跟我说做一条俯角30*,与x轴相交的直线,本以为现实纸张上中随手一笔在osg里面对我这样的小白如此艰难,因为前面我也说过,以前我学了些C++,但对osg却一无所知,只能迎着头皮一点一点的试,最后忙了一天是蓝屏。。。我不甘心的改了些参数,它出现了一条又丑又黑的线段,但我无比激动,这就是计算机带给我的的快乐和激动,哈哈哈,毕竟自己一天查了那么多资料一个字母一个字母的敲出来的,谁会嫌弃自己的孩子丑呢,这也是自己深爱编程的原因,任何行业无法比拟的,言归正传,我发现网上一搜osg做的几何体的源码例子很多很经典,但我发现写一条线段的代码真的很少,可能太简单了吧,但对初学者来说真的挺难的。下面我会记下今天的心得。

#include <osgUtil/SmoothingVisitor>
#include <osg/Geometry>
#include <osg/Matrixd>
#include <osg/MatrixTransform>
#include <osgViewer/Viewer>
#include <osg/LineWidth>
int main()
{//创建相应的节点和对象
	osg::ref_ptr<osg::Geode>      geo     = new  osg::Geode;              //创建子节点
	osg::ref_ptr<osg::Geometry>   geom    = new  osg::Geometry;     //创建绘画对象
	osg::ref_ptr<osg::Vec3Array>  point   = new  osg::Vec3Array;     //创建线段数据数组
	osg::ref_ptr<osg::Vec3Array>  normal  = new  osg::Vec3Array;   //法线数据数组
	//设置线段定点数据
	point->push_back(osg::Vec3(10.0,30.0,0.0)); //线段起点,组长给的起点是10,30
	point->push_back(osg::Vec3(100.0, 0.0, 0.0));
	normal->push_back(osg::Vec3(0.0, 0.0, 0.0)); //坐标原点
	normal->push_back(osg::Vec3(40.0, 0.0, 0.0));
	geom->setVertexArray(point.get());               //将设置好的数据传入图元
	geom->setNormalArray(normal.get());
	osg::ref_ptr<osg::LineWidth> lw = new osg::LineWidth(6.0);    //设置线条宽度
	geom->getOrCreateStateSet()->setAttribute(lw, osg::StateAttribute::ON);
	geom->setNormalBinding(osg::Geometry::BIND_OVERALL);   //与法线的绑定方式,这里我选择的旋转
	geom->addPrimitiveSet(new osg::DrawArrays(osg::DrawArrays::LINES, 0, 2));     //???后面两个参数不明白
	geo->addDrawable(geom);              //调用函数画图元
	osgViewer::Viewer viewr;              //建立view对象在屏幕中显示
	viewr.setSceneData(geo.get());   
	return viewr.run();
}
![这就是我费劲巴力的丑丑线,花了我这么多行代码,哈哈](https://img-blog.csdnimg.cn/20200306002718500.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1NzM1MQ==,size_16,color_FFFFFF,t_70)
#总结
osg画图都会有几个步骤
1、生成子节点:	osg::ref_ptr<osg::Geode>      geo     = new  osg::Geode; 你可以将这个节点的效果加到别的节点
2、创建绘图类的对象	osg::ref_ptr<osg::Geometry>   geom    = new  osg::Geometry;  这就好像画画一样你要现在脑海中拿一些注意力来先想象。
3、创建相关的数据数组    	osg::ref_ptr<osg::Vec3Array>  point   = new  osg::Vec3Array;    osg::ref_ptr<osg::Vec3Array>  normal  = new  osg::Vec3Array; 接着去想画什么,怎么画,画哪里,然后对这些数据初始化
4、将想好的东西组合起来,osg::setvertex(xxx.get)........
5、最后把所有的全部整合起来组成一幅完美的画卷,尽管在脑子里。    	geo->addDrawable(geom);     
6、最后的组后把你脑海中的画面从脑子中展现出来就要用sogviewer::viewer了
尽管今天的东西相差甚远,但总算有了收获,明天还会继续的,把他完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值