实例5:osgautocapture例子实现屏幕截图(OSG程序开发实例)
来源:互联网 发布:centos 关闭selinux 编辑:程序博客网 时间:2024/05/16 12:55
该例子代码比较复杂,考虑了大场景节点调入时的情形,我们对示例进行简化,目的是体会OSG与OpenGL的关系.
#include <osg\libs.h>
class finalDraw : public osg::Camera::DrawCallback//相机更新回调类
{
public:
finalDraw() { _image = new osg::Image; }//构造函数,分配私有图片类变量内存
virtual void operator () (osg::RenderInfo& renderInfo) const//虚函数,实现目的操作
{ static bool first;//控制文件只写入一次
glReadBuffer(GL_BACK);//直接调用OpenGL函数,实现对后缓冲区的读取
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);//开启线程保护
osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext();//获取当前图形上下文
int width = gc->getTraits()->width; int height = gc->getTraits()->height;//获取窗口的长宽
if(!first)//首次可以执行下面语句
{ _image->readPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE);//数据填充到图片
osgDB::writeImageFile(*_image, "autocapture.jpg");//图片写入到当前程序目录下
first = true;//首次已经执行
}
}
protected:
osg::ref_ptr<osg::Image> _image;//图片变量
mutable OpenThreads::Mutex _mutex;//线程保护对象变量
};
void main()
{ osgViewer::Viewer viewer;//创建视图类,实现建立窗口等操作
osg::Node *loadedModel = osgDB::readNodeFile("glider.osgt");//应用osgDB文件读写类读入glider模型节点
viewer.setSceneData(loadedModel);//为视图类设置场景,即观察glider模型
viewer.setCameraManipulator( new osgGA::TrackballManipulator() ); //设置视点的操作类,类似Vega Prime的MotionDrive
viewer.realize();//初始化
while(!viewer.done())//程序没有终止,如按下Esc键,程序会终止
{ static bool once;//控制相机更新回调只加入一次
viewer.frame();//更新一帧
if(!once && (viewer.elapsedTime()>5) )//没有执行且时间大于5秒,执行下现语句
{ once = true;//相机更新回调已经执行
viewer.getCamera()->setFinalDrawCallback(new finalDraw());//加入更新回调,输出图像
}
}
}
- 实例5:osgautocapture例子实现屏幕截图(OSG程序开发实例)
- 实例4:osganimationsolid例子实现关键帧插值动画(OSG程序开发实例集)
- C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
- C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
- C#软件开发实例.私人订制自己的屏幕截图工具(三)托盘图标及菜单的实现
- C#软件开发实例.私人订制自己的屏幕截图工具(三)托盘图标及菜单的实现
- C#软件开发实例.私人订制自己的屏幕截图工具(十一)编辑工具栏的实现
- osgautocapture例子
- android开发实例03:屏幕截图并调用邮件发送
- C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览
- C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览
- C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
- C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
- C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能
- C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能
- C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能
- C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能
- C#软件开发实例.私人订制自己的屏幕截图工具(二)创建项目、注册热键、显示截图主窗口
- VIM 配置成source insight
- hdu1569find the safest road(floyd变形求最大安全值)
- GTK简单版计算器
- Windows8.1离线部署应用程序
- mms list
- 实例5:osgautocapture例子实现屏幕截图(OSG程序开发实例)
- 机器学习算法概览
- Python 替换不支持作为目录名的字符
- 个人对银行知识的几点认识和理解
- C++中得拷贝构造函数
- leetcode Reverse Integer
- 资深系统管理员给Linux/Unix新人们的建议
- 温故知新--Servlet(七)--请求转发和重定向区别
- UvaOJ 10098 Generating Fast, Sorted Permutation