osg-03-基本几何图元-正方形

1.基本绘制方法

在这里插入图片描述

#include <osgDb/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Geometry>
#include <osgViewer/ViewerEventHandlers>

osg::ref_ptr<osg::Node> CreateQuad();


int main()
{
	osgViewer::Viewer viewer;

	osg::Group* root = new osg::Group();
	root->addChild(CreateQuad().get());
	viewer.setSceneData(root);

	// 窗口大小变化事件 F
	viewer.addEventHandler(new osgViewer::WindowSizeHandler);

	viewer.realize();
	return viewer.run();
}

osg::ref_ptr<osg::Node> CreateQuad()
{
	osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;

	//首先定义四个点
	osg::ref_ptr<osg::Vec3Array> vertex = new osg::Vec3Array;
	geometry->setVertexArray(vertex.get());
	vertex->push_back(osg::Vec3(-1.f, 0.f, -1.f));
	vertex->push_back(osg::Vec3(1.f, 0.f, -1.f));
	vertex->push_back(osg::Vec3(1.f, 0.f, 1.f));
	vertex->push_back(osg::Vec3(-1.f, 0.f, 1.f));

	//定义颜色数组
	osg::ref_ptr<osg::Vec4Array> color = new osg::Vec4Array;
	geometry->setColorArray(color);
	geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
	color->push_back(osg::Vec4(1.f, 0.f, 0.f, 1.f));
	color->push_back(osg::Vec4(0.f, 1.f, 0.f, 1.f));
	color->push_back(osg::Vec4(0.f, 0.f, 1.f, 1.f));
	color->push_back(osg::Vec4(1.f, 1.f, 1.f, 1.f));

	//定义法线
	osg::ref_ptr<osg::Vec3Array> normal = new osg::Vec3Array;
	geometry->setNormalArray(normal.get());
	geometry->setNormalBinding(osg::Geometry::BIND_OVERALL);
	normal->push_back(osg::Vec3(0.f, -1.f, 0.f));

	//设置顶点关联方式
	geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));

	//几何组结点
	osg::ref_ptr<osg::Geode> geode = new osg::Geode;
	geode->addDrawable(geometry.get());

	return geode.get();
}

2.运行结果

正面
在这里插入图片描述

背面
在这里插入图片描述

注:osg默认坐标系是x轴向右,y轴向里,z轴向上。故将法线设为-1则是正视图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值