查看: 1900|回复: 8

求助:OSG控件,将图形保存为JPG

[复制链接]

该用户从未签到

发表于 2009-11-5 16:31:18 | 显示全部楼层 |阅读模式
各位大侠好,我刚接触osg
想请教1个问题,用OSG实现了1个OCX控件,在MFC程序里调用,现在想实现抓图功能,用户通过在MFC的界面上点Button,定义1个jpg文件名,然后抓图保存在这个文件里。
我在网上搜到的例子都是在控制台程序,通过回调函数捕捉键盘输入实现的,现在没有思路,请问这方面有了解的吗?

我的代码如下:保存的图形是黑的
osg::Camera* camera = new osg::Camera;
  // set up the background color and clear mask.
  camera->setClearColor(osg::Vec4(0.1f,0.1f,0.3f,1.0f));
  camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // set up projection.
  camera->setProjectionMatrix(viewer.getCamera()->getProjectionMatrix());
  // set view
  camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
  camera->setViewMatrix(viewer.getCamera()->getViewMatrix());
  // set viewport
  int w = 1280; // viewer.getCamera()->getViewport()->width();
  int h = 1024; // viewer.getCamera()->getViewport()->height();
  camera->setViewport(0,0,w,h);
  // set the camera to render before the main camera.
  camera->setRenderOrder(osg::Camera:RE_RENDER);
  osg::Image* imageSave = new osg::Image;
  imageSave->readPixels(0,0,w,h,GL_RGB,GL_UNSIGNED_BYTE);
  camera->attach(osg::Camera::COLOR_BUFFER, imageSave);
  camera->addChild(viewer.getSceneData());
  osgDB::writeImageFile(*imageSave,"c:\\test.jpg");

该用户从未签到

发表于 2009-11-5 16:38:53 | 显示全部楼层
用GUIEventHandler就可以了,没什么特别的

该用户从未签到

 楼主| 发表于 2009-11-5 19:35:56 | 显示全部楼层
GUIEventHandler 不是响应鼠标和键盘事件的吗?
是回调时,才有效果吧,应该怎么用呢?
大虾能说详细点吗?

该用户从未签到

发表于 2009-11-5 22:21:36 | 显示全部楼层
至于图片是黑的,好像高版本呢osg要在Drawcallback里读buff才行~~~

至于相应mfc的按钮,我也很想知道~~~

该用户从未签到

发表于 2009-11-6 08:13:41 | 显示全部楼层
的确要在Drawcallback里完成,更好的方法是设置相机使用FBO,可以参考osgprerender例子。MFC里的使用和控制台下并没有什么不同,您可以自己实践;我个人是 反MFC 的,所以不会研究它

该用户从未签到

 楼主| 发表于 2009-11-6 08:26:17 | 显示全部楼层
响应mfc的按钮,纠结

该用户从未签到

发表于 2009-11-6 10:45:18 | 显示全部楼层
估计让osg相应MFC的按钮得自己搞了~~

该用户从未签到

发表于 2009-11-6 13:23:05 | 显示全部楼层
一个最简单的做法就是在按下键之后,发送一个指令到UpdateCallback的实例指针中,然后在回调中解析指令并在下一帧安全地执行。

该用户从未签到

 楼主| 发表于 2009-11-6 13:31:10 | 显示全部楼层
谁给点建设性的意见哪
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表