我要发帖 回复

正式会员

1

主题

34

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2015-12-21 18:25:41 | 浏览 : 2795    评论 : 0
#include <vuAllocTracer.h>
#include <vpApp.h>
#include "vsMovieRecorder.h"

// track memory leaks
vuAllocTracer m_allocTracer;

class myApp : public vpApp {

public:

    /**
     * Constructor
     */
    myApp() : m_window(NULL),
              m_channel(NULL),
              m_movieRecorder(NULL),
              m_bRecording(false),
              m_recordingIndex(0)
    {}

    /**
     * Destructor
     */
    ~myApp()
    {
        if (m_movieRecorder)
            delete m_movieRecorder;

        if (m_window)
            m_window->unref();

        if (m_channel)
            m_channel->unref();
    }
   
    /**
     * Configuration
     */
    int configure()
    {
        vpApp::configure();
        
        m_window = *vpWindow::begin();
        assert(m_window);
        m_window->ref();

        m_channel = *vpChannel::begin();
        assert(m_channel);
        m_channel->ref();

        return vsgu::SUCCESS;
    }
   
    /**
     * Override keyboard input
     */
    virtual void onKeyInput(vrWindow::Key key, int mod)
    {
        vpObserver *observer = *vpObserver::begin();

        switch (key) {
            
        case vrWindow::KEY_F8:
            if(m_bRecording){
                m_channel->removeSubscriber(vpChannel::EVENT_POST_DRAW, m_movieRecorder, true);
                if(m_movieRecorder != NULL){
                    delete m_movieRecorder;
                    m_movieRecorder = NULL;
                }
            }else{
                int width, height;
                vuNotify::print(vuNotify::LEVEL_WARN, NULL, "Please do not move or resize the window during recording!");
                m_window->getSize(&width, &height);
                m_movieRecorder = new vsMovieRecorder();
                char buffer[2048];
                sprintf(buffer, "vp_movie_recorder_Capture_%d.avi", m_recordingIndex);
                m_movieRecorder->configure(buffer, 60, true, width, height );
                m_channel->addSubscriber(vpChannel::EVENT_POST_DRAW, m_movieRecorder);
                m_recordingIndex++;
            }
            m_bRecording = !m_bRecording;
            break;

           
        default:
            vpApp::onKeyInput(key, mod);
            break;

        }

    }

private:

    vpWindow *m_window;

    vpChannel *m_channel;

    // our movie recorder
    vsMovieRecorder *m_movieRecorder;

    // recording control
    bool m_bRecording;

    // recording index for file names
    int m_recordingIndex;

};

int main(int argc, char *argv[])
{
    // initialize vega prime
    vp::initialize(argc, argv);

    // don't need to initialize vpmotion, it's already done by the acf

    // create my app instance
    myApp *app = new myApp;

    // load acf file
    if (argc <= 1)
        app->define("vp_movie_recorder.acf");
    else
        app->define(argv[1]);

    // configure my app
    app->configure();

    // runtime loop
    app->run();

    // unref my app instance
    app->unref();

    // shutdown vega prime
    vp::shutdown();
   
    return 0;
}

最近VR访客

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-12-4 01:06 AM

返回顶部