osg中的RTT导航图问题

       很久没有逛osg的论坛了,上次逛的时候收到一条信息,因为他遇到了几乎跟我一样的问题,然后在论坛上看到我的那个关于RTT导航图的帖子,所以问我怎么做,其实我在论坛上已经说明了解决的思路,这个思路的实现也非常容易。因为非常感谢在我遇到问题时帮我解决问题的人,所以我又在邮件中详细的跟ta讲了一遍,不过,这个人从开始到结束没有一声谢谢!在这边说这个不是因为他没跟我说谢谢,而是为了提醒下各位在问问题时不管别人有没有给你解答都最好礼貌的说声谢谢,你我素不相识,我为什么要给你解答呢?这个是素养问题。不好意思扯远了。

  问题:问题是RTT相机的位置总是调不对,不是HUD没有纹理就是红点不显示。

解答:不显示红点可能是我帖子上说的场景太大,红点太小的原因。因为给rtt相机设置投影的大小和场景的大小不匹配导致相机中的图像要么只有一小块,要么偏一边,所以只要相机的投影和视点设置正确就行了,居然这样的话,只要通过场景的包围球(有圆心和半径)来设置相机的投影和视点不就行了吗?这部分代码如下:

double radius = mModel->getBound().radius();
	double viewDistance = 2*radius;//
	double znear =radius;//viewDistance - bs.radius();
	double zfar = 3*radius;//viewDistance + bs.radius();
	float top =radius;
	float right =radius;
	//设置烘焙相机
	osg::ref_ptr<osg::Camera> rttCamera=new osg::Camera;  
	rttCamera->setProjectionMatrixAsOrtho( -right, right, -top, top, znear, zfar );//(-160,160,-100,100,500,500
	//方向向上
	osg::Vec3d up( 0.0,1.0,0.0 );
	//
	osg::Vec3d viewDirection( 0.0,0.0,1.0 );

	//中点
	osg::Vec3d center = mModel->getBound().center();
	//
	osg::Vec3d eye = center + viewDirection * viewDistance;
	//相机设置矩阵
	rttCamera->setViewMatrixAsLookAt(eye,center,up);  
	rttCamera->setRenderOrder(osg::Camera::PRE_RENDER);  
	rttCamera->setClearMask(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);  

可能需要调整下参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值