OSG 基于RTT输出模型正射高清图

OSG 基于RTT输出模型正射高清图

项目场景

osg显示模型 需要输出模型的高清正射图。

过程实现细节点

可以参考osg源码中rtt相机的创建以及使用 在源码中全局搜索FRAME_BUFFER_OBJECT必能找到。
@Override
			osg::ref_ptr<osg::camera> pCamera = new osg::camera;
			pCamera->setClearColor(osg::vec4(0.0f, 0.f, 0.f, 0.f));	
			pCamera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
			pCamera->setRenderOrder( osg::Camera::PRE_RENDER );	//指定渲染顺序 PRE_RENDER
    		pCamera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );	//指定实现方式 FBO 
			//设置投影矩阵 (平行投影 或 透视投影)
			pCamera->setProjectionMatrixAsOrtho(xxx);
			//设置相机姿态
			pCamera->setViewMatrixAslookAt(xxx);
			//设置相机视口大小
			pCamera->setViewport(xxx);
			//若一个相机连续输出多个模型正射图 改变相机位置后 需更新相机绑定纹理(卡点)
			pCamera->dirtyAttachmentMap();
			
			//图片的大小和相机宽高保持一致
			osg::ref_ptr<osg::image> pImage = new osg::image;
			pImage->allocateImage(nW, nH, GL_RGBA, GL_UNSIGNED_BYTE);
			pCamer->attach(osg::camera::color_buffer, pImage, 0, 0);
			
			//把模型添加相机中 否则输出图片黑色
			pCamera->addChild(model);

			osg::ref_ptr<osg::Group> pGroup = new osg::Group;
			pGroup->addChild(pCamera);
			

细节点:
1.指定渲染顺序:PRE_RENDER
2.指定实现方式:FRAME_BUFFER_OBJECT (若使用FB, 超过显示视口宽高渲染部分的纹理会被裁切)
3.若使用一个相机 输出多个模型正射图像,需要在相机位置改变后,更新绑定纹理pCamera->dirtyAttachmentMap();
4.注意保持相机投影矩阵宽高比和相机视口宽高比保持一致(否则输出图片的纹理会扭曲拉花)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值