由于需要自动抓取OSG中的场景截图,对OSG掌握不好,花费了一些时间才算搞定。
首先,OSG在类osgViewer::ScreenCaptureHandler中默认情况下按下c(小写c)可以截取单张图片,而且实现得比较全面,在按下C(大写c)时可以连续截图;经过继承osgViewer::ScreenCaptureHandler类和osgViewer::ScreenCaptureHandler::CaptureOperation类,由于需要自动在某个时刻保存,所以些了一个自定义的事件,并将事件压入OSG的事件队列。
上代码:
ScreenCapture.h文件
#pragma once
#ifndef SCREENCAPTURE_H
#define SCREENCAPTURE_H
#include <string>
#include <osgDB/WriteFile>
#include <osgViewer/ViewerEventHandlers>
class CScreenCapture : public osgViewer::ScreenCaptureHandler
{
public:
class WriteToImageFile : public osgViewer::ScreenCaptureHandler::CaptureOperation
{
public:
enum SavePolicy
{
OVERWRITE,
SEQUENTIAL_NUMBER
// ... any others?
};