查看: 1886|回复: 5

osg::Image的Origin属性

[复制链接]

该用户从未签到

发表于 2012-12-24 22:59:38 | 显示全部楼层 |阅读模式
  1. for(unsigned int i = 0; i < 6; i++)
  2.         {
  3.                 image_data[i] = new unsigned char[512*512*3];
  4.                 cube_surface[i] = new osg::Image;

  5.                 cube_surface[i]->allocateImage(512,512,1,GL_BGR,GL_UNSIGNED_BYTE);
  6.                 cube_surface[i]->setOrigin(osg::Image::TOP_LEFT);
  7.                 cube_surface[i]->setImage(512,512,
  8.                         1,GL_RGB,GL_BGR,GL_UNSIGNED_BYTE,(BYTE*)image_data[i],
  9.                         osg::Image::AllocationMode::USE_NEW_DELETE);
  10.         }
复制代码
如上设置Origin属性为:TOP_LEFT。
官方解释如下:
TOP_LEFT is used for imagery that follows standard Imagery convention, such as movies, and hasn't been flipped yet. For such images one much flip the t axis of tex coords.

不过,我发现设置了TOP_LEFT和不设置(默认的BOTTOM_LEFT)在贴图时没有区别啊,也没有上下翻转。

该用户从未签到

发表于 2012-12-25 09:57:28 | 显示全部楼层
这个属性其实并不影响图像本身,图像都是BOTTOM_LEFT读入的,但是在使用CreateGeodeForImage()的时候会影响其贴图坐标的设置策略

该用户从未签到

 楼主| 发表于 2012-12-25 15:15:22 | 显示全部楼层
本帖最后由 lglgaigogo 于 2012-12-25 15:16 编辑
array 发表于 2012-12-25 09:57
这个属性其实并不影响图像本身,图像都是BOTTOM_LEFT读入的,但是在使用CreateGeodeForImage()的时候会影响 ...


后来我用了这个笨办法,如下:
  1. unsigned int lineSize = 512*3;
  2.         for (unsigned int i = 0; i < 512; i++)
  3.         {
  4.                 memcpy(des + i*lineSize, src + (512 - 1 - i)*lineSize, lineSize);
  5.         }
复制代码
就是把图像从最后一行,到第一行,重新拷贝了一遍,反正总是要拷贝的。
算是勉强解决了,性能上还说得过去。

该用户从未签到

发表于 2012-12-27 09:10:25 | 显示全部楼层
您要反转图片的话,有flipVertical()可以直接用

该用户从未签到

 楼主| 发表于 2012-12-27 15:01:07 | 显示全部楼层
本帖最后由 lglgaigogo 于 2012-12-27 15:15 编辑
array 发表于 2012-12-27 09:10
您要反转图片的话,有flipVertical()可以直接用


其实这个我试过了。不知道是什么原因。这个函数是在OnTimer里面,有时候这个函数不能正确执行。
我是在每一次把图像的数据拷贝之后,执行这个函数的。
有时候图像能翻转,有时候不能。
不知道是这个函数没有执行,还是因为数据没有及时更新,又把翻转之后的数据翻转了一次。

该用户从未签到

发表于 2012-12-28 18:01:48 | 显示全部楼层
执行后需要dirty(),还有注意dds是不能反转的,因为本身已经是压缩格式了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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