本节需求
经常的,我们需要将相机渲染的内容传给其它的机器或者保存成图片。甚至需要将相机显示的内容进行录制,制作成mp4。其实制作成mp4也是用的图片,将每一帧的图片存下来,使用相关库制作成mp4就可以。
具体实现
其实将相机的内容抓取到图片只需要一句话:其中_t2d是一个osg::Image
camera->attach(osg::Camera::COLOR_BUFFER, _t2d);
此时,相机在渲染时,就可以实时的将渲染内容rtt到image当中。
本节还写了个事件处理,当点击p键的时候,保存图片到a.png:
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
//点击p键
if ((ea.getEventType() == ea.KEYDOWN)&&((ea.getKey() == 'P')|| (ea.getKey() == 'p')))
{
osgDB::writeImageFile(*_t2d, "a.png");
}
return false;
}
主要的代码就上面这些了。
本节资源
本文集包括本节所有资源包括模型代码都在此下载,按节的序号有文件或文件夹,具体到本节是27.cpp:
注意: 务必使用浏览器打开:
【击此打开网盘资源链接】
所有代码
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgGA/GUIEventHandler>
#include <osg/Texture2D>
#include <osgDB/WriteFile>
osg::ref_ptr<osg::Image> _t2d = new osg::Image;
class MyEventHandler : public osgGA::GUIEventHandler
{
public:
MyEventHandler()
{
}
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
//点击p键
if ((ea.getEventType() == ea.KEYDOWN)&&((ea.getKey() == 'P')|| (ea.getKey() == 'p')))
{
osgDB::writeImageFile(*_t2d, "a.png");
}
return false;
}
};
int main(int argc, char** argv)
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
viewer.addEventHandler(new MyEventHandler());
//设置rtt
viewer.getCamera()->attach(osg::Camera::COLOR_BUFFER, _t2d);
//
viewer.run();
return 0;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容