查看: 1153|回复: 7

求教!如何实现滚动纹理?

[复制链接]

该用户从未签到

发表于 2011-5-22 21:29:29 | 显示全部楼层 |阅读模式
我想实现滚动纹理,方法如下:每一帧渲染都做如下处理,我把每一帧的image_c 都保存成bmp下来了,效果是对的,但现实到模型上就不对,纹理好像只改变了一次,为什么?谢谢!
txtOldTexture是我每一帧都得到的纹理,没有一帧是null
  1. osg::Image *image_c=new osg::Image();
  2. image_c->allocateImage(64,64,1,GL_RGB,GL_UNSIGNED_BYTE);
  3. image_c=txtOldTexture->getImage();
  4. unsigned char* pD=image_c->data();

  5. for(y=0;y<63;y++)
  6. {
  7. for(x=0;x<64;x++)
  8. {
  9. pDa[2]=pD[(0)*64*3+x*3+2];
  10. pDa[1]=pD[(0)*64*3+x*3+1];
  11. pDa[0]=pD[(0)*64*3+x*3+0];

  12. pDat[2]=pD[(y+1)*64*3+x*3+2];
  13. pDat[1]=pD[(y+1)*64*3+x*3+1];
  14. pDat[0]=pD[(y+1)*64*3+x*3+0];

  15. pD[(y)*64*3+x*3+2]=pDat[2];
  16. pD[(y)*64*3+x*3+1]=pDat[1];
  17. pD[(y)*64*3+x*3+0]=pDat[0];
  18. }
  19. }
  20. for(x=0;x<64;x++)
  21. {
  22. pD[63*64*3+x*3+2]=pDa[2];
  23. pD[63*64*3+x*3+1]=pDa[1];
  24. pD[63*64*3+x*3+0]=pDa[0];
  25. }
  26. txtOldTexture->setImage(image_c);

复制代码

该用户从未签到

发表于 2011-5-22 22:49:44 | 显示全部楼层
只从上面的代码来看,您做了很多无用功

该用户从未签到

发表于 2011-5-23 09:04:36 | 显示全部楼层
您没有给出核心部分的代码,即,您的纹理序列是如何体现在模型上的?您是否用到了ImageSequence或者别的类了?

该用户从未签到

发表于 2011-5-23 12:16:10 | 显示全部楼层
你的问题应该是纹理没有更新,请使用dirty方法更新纹理!

该用户从未签到

 楼主| 发表于 2011-5-23 15:41:39 | 显示全部楼层
回复 4# fenma3422


    可能是这个问题,但dirty方法具体哪一个啊?我看Texture.cpp里有dirtyTextureobject()dirtyTextureParameters()两个,我不清楚是干什么的。请具体点,谢谢!

该用户从未签到

 楼主| 发表于 2011-5-23 15:47:20 | 显示全部楼层
回复 3# array


     我就是每一帧得到要贴纹理的节点geode,代码:

  1. osg::StateSet *pStateSet=geode->getStateSet();
  2. osg::TextureRectangle *txtOldTexture=static_cast<osg::TextureRectangle*>(pStateSet->getTextureAttribute(0,osg::StateAttribute::Type::TEXTURE));
  3. txtOldTexture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
  4. txtOldTexture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
复制代码

该用户从未签到

 楼主| 发表于 2011-5-23 16:07:35 | 显示全部楼层
回复 2# liuzhiyu123


    编程水平有限,请具体指教,万分感激!谢谢!

该用户从未签到

发表于 2011-5-24 09:13:48 | 显示全部楼层
您依然没有给出我需要的信息:您是否用到了ImageSequence或者别的类了?抑或您用了自己的方法,那样请给出您更新纹理的方法代码来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表