我要发帖 回复

正式会员

3

主题

62

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2012-10-24 19:24:05 | 浏览 : 1186    评论 : 4
最近VP学习不多,想问下,各位大神。
我想要实现在VP场景中,每个一个固定时间截图,并存储到指定路径下的文件中,图片的名字按照001,002等命名。
不知道有什么好的思路和方法没?
真心请教了。

最近VR访客

woshijiameizhou 评论于2012-10-25 09:40:11
本帖最后由 woshijiameizhou 于 2012-10-25 09:47 AM 编辑

抓图一般在一帧渲染完之后进行,可以从vsChannel::Subscriber派生一个类,比如常见的可以这样
  1. class myApp : public vpApp, public vsChannel::Subscriber {... ...}
复制代码
通过以下这句添加一帧完成后的事件回调
  1. channel->addSubscriber(vsChannel::EVENT_POST_DRAW, /*new出来的myApp*/);
复制代码
重写下面方法
  1. virtual void notify(vsChannel::Event, const vsChannel *channel,vrDrawContext *context)
复制代码
实际上要精确控制时间间隔可能很难,可以通过帧索引来间接控制时间(比如间10帧抓图), notify里面大概可以这样写:
      static long long index=0;
     static vuField<vuImageFactory*> m_imageFactory = new vuImageFactory();
     static vuField<uchar*,vuFieldTraitBinary>  m_data=NULL;
     if((index++)%10 == 0) {
         int originX, originY, width, height;
        channel->getVrChannel()->getViewport(&originX, &originY,&width, &height);        
        int numPixels = 3 * width * height;
        if (m_data == NULL)
            m_data = vuAllocArray<uchar>::malloc(numPixels);
        else if (vuAllocArray<uchar>::getSize(m_data.get()) != numPixels)
            m_data = vuAllocArray<uchar>::malloc(numPixels);
        glReadPixels(originX, originY, width, height, GL_RGB,GL_UNSIGNED_BYTE, m_data.get());        
        vuImageUserBuffer image(m_data.get());
        image.setDimensions(width, height);
        image.setPixelType(vuImageBase::PixelType(vuImageBase::TYPE_UNSIGNED_BYTE,8,8,8,0));
        char buf[256]; sprintf_s(buf, "%lld.rgb",index);
        m_imageFactory->write(buf, &image);
}
我也是vp新手,代码也没有经过测试,仅供参考。

woshijiameizhou 评论于2012-10-25 09:48:40
不知这个怎么编辑大段的代码,好像超过四行就无法显示了,最后只能写成那样了
杰特凯勒 评论于2012-10-25 16:44:35
woshijiameizhou 发表于 2012-10-25 09:40 AM
抓图一般在一帧渲染完之后进行,可以从vsChannel::Subscriber派生一个类,比如常见的可以这样通过以下这句 ...

嗯,谢了哈,我先试试的。
有结果了,给你说了哈。
杰特凯勒 评论于2012-11-1 18:34:43
woshijiameizhou 发表于 2012-10-25 09:48 AM
不知这个怎么编辑大段的代码,好像超过四行就无法显示了,最后只能写成那样了 ...

嗯,可以的。
验证了一下,截图效果不错。谢谢了。

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

GMT+8, 2021-8-5 10:46 PM

返回顶部