QtプログラムでOSGシーンをイメージにレンダリングしようとしています。 SnapImageDrawCallback(https://www.mail-archive.com/[email protected]/msg45360.html)の例を参照してください。 (状態の開始時に、OpenGLのエラー 『無効な操作』を検出した::適用されます。OSGシーンをイメージに変換
class SnapImageDrawCallback : public osg::CameraNode::DrawCallback {
public:
SnapImageDrawCallback()
{
_snapImageOnNextFrame = false;
}
void setFileName(const std::string& filename) { _filename = filename; }
const std::string& getFileName() const { return _filename; }
void setSnapImageOnNextFrame(bool flag) { _snapImageOnNextFrame = flag;}
bool getSnapImageOnNextFrame() const { return _snapImageOnNextFrame; }
virtual void operator() (const osg::CameraNode& camera) const
{
if (!_snapImageOnNextFrame) return;
int x,y,width,height;
x = camera.getViewport()->x();
y = camera.getViewport()->y();
width = camera.getViewport()->width();
height = camera.getViewport()->height();
osg::ref_ptr<osg::Image> image = new osg::Image;
image->readPixels(x,y,width,height,GL_RGB,GL_UNSIGNED_BYTE);
if (osgDB::writeImageFile(*image,_filename))
{
std::cout << "Saved screen image to `"<<_filename
<<"`"<< std::endl;
}
_snapImageOnNextFrame = false;
}
protected:
std::string _filename;
mutable bool _snapImageOnNextFrame;
};
私はOSG :: ViewerのカメラのFinalDrawCallbackとしてこれを設定するが、私は警告が」白紙画像で失敗しましたし、この警告を取得します) "を呼び出すと、image-> readPixels、My osgViewer :: ViewerがQQuickFramebufferObjectに埋め込まれます。誰にでも何か示唆を与えることはできますか?