OSG相机

本文详细介绍了如何在OSG(OpenSceneGraph)中设置相机参数,包括如何获取模型的包围球,设置投影矩阵和观察矩阵,以及如何通过LookAt函数调整相机的位置和方向,为读者提供了深入理解OSG相机操作的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OSG相机相当于视角,也就是观看模型的视角,每个在三维系统中都会有一个默认的相机也就是默认的视角:
osg::Camare的默认朝姿态:
位置在 0,0,0
姿态是:向下看(Z轴负向 0,0,-1)
头向前(Y轴正向 0,1,0,也就是说相机是正着的)

void setCamera() {
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
	viewer->addEventHandler(new osgViewer::WindowSizeHandler());
	osg::ref_ptr<osg::Camera> camera = new osg::Camera;
	//获取模型的包围球
	osg::ref_ptr<osg::Node> n1 = osgDB::readNodeFile("cow.osgt");
	osg::BoundingSphere bound = n1->getBound();

	//设置相机的投影矩阵
	double viewDis = bound.radius()*2.0;
	double zNear = viewDis - bound.radius();
	double zFar = viewDis + bound.radius();
	double left = -bound.radius();
	double right = bound.radius();
	double top = bound.radius();
	double bottom = -bound.radius();
	camera->setProjectionMatrixAsOrtho(left, right, bottom, top, zNear, zFar);

	//设置观察矩阵
	osg::Vec3d up(0.0, 1.0, 0.0);
	osg::Vec3d center = bound.center();
	osg::Vec3d view(0.0, 0.0, 1.0);
	osg::Vec3d eye(0.0, -50.0, 0.0);
	camera->setViewMatrixAsLookAt(eye, center, up);
	camera->addChild(n1.get());
	viewer->setSceneData(camera.get());
	viewer->run();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值