1

Qt プログラムで OSG シーンをイメージにレンダリングしようとしています。SnapImageDrawCallback の例を参照してください ( https://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg45360.html )。

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 として設定しましたが、空白の画像で失敗し、「警告: State::apply() の開始時に OpenGL エラー '無効な操作' が検出されました」という警告が表示されます。 readPixels、QQuickFramebufferObject に埋め込まれた My osgViewer::Viewer。誰でもいくつかの提案をすることができますか?

4

2 に答える 2

2

適切なポインタを提供できるかどうかわからない場合は、セットアップと目的に関する詳細を提供する必要があります。

一般的な注意として、OSG を使用して QtQuick ウィジェットにレンダリングしようとしている場合、最善の方法は、osg を別の共有 GL コンテキストで FBO にレンダリングし、FBO の内容を qtquick ウィジェットにコピーすることです。私はこのアプローチを数回前にテストしました。ここでコードを参照してください: https://github.com/rickyviking/qmlosg

別の同様のプロジェクト: https://github.com/podsvirov/osgqtquick

于 2016-05-20T08:12:39.067 に答える