查看: 1513|回复: 4

用FBO贴纹理出现的问题

[复制链接]

该用户从未签到

发表于 2009-11-8 11:07:32 | 显示全部楼层 |阅读模式
我将Texture直接广联到Camera的时候,贴出来的纹理.右边和上边出现空白边框.
如果先将Camera关联到一个Image然后将Image贴到节点上,就不会出项这样的空白框.
贴图如下: RTT.PNG

该用户从未签到

 楼主| 发表于 2009-11-8 11:22:53 | 显示全部楼层
用于RTT的Camera的姿态如下:
  1.     TrackballManipulator::home(0);       
  2.     Matrixd mat=getInverseMatrix();
  3.     Vec3 eye,center,up;
  4.     mat.getLookAt(eye,center,up,_distance);
  5.     Vec3 dir(0,0,-1);
  6.           _distance*=0.1;
  7.     dir*=_distance;
  8.     eye=center-dir;
  9. computePosition(eye,center,up);
复制代码
这个Transforma是从Trackball派生的.
是不是由于根据center,dir和eye计算出来的结果是一个视锥体地部是圆的啊?

该用户从未签到

 楼主| 发表于 2009-11-8 11:50:19 | 显示全部楼层
投影参数设置如下:
  1. ComputeBoundsVisitor v;
  2.     destNode->accept (v);
  3.     BoundingBox box=v.getBoundingBox ();

  4.     float w=(box.xMax ()-box.xMin());
  5.     float h=(box.yMax ()-box.yMin());
  6.     int txt_width=800,txt_height=(int)(800*h/w);
  7.     Camera *camera=new Camera;

  8.     camera->setClearColor(osg::Vec4(1.f,1.f,1.f,1.0f));
  9.     camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  10.     camera->setProjectionMatrix(osg::Matrix::ortho2D(-w/2,w/2,-h/2,h/2));
  11.     camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);

  12.     camera->setViewport(0,0,txt_width,txt_height);
  13.     camera->setRenderOrder(osg::Camera::PRE_RENDER);
  14.     camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
复制代码

该用户从未签到

发表于 2009-11-8 12:49:37 | 显示全部楼层
纹理图像干嘛关联到camera啊?不是image读进来,再关联到节点的纹理state属性就好了~~

该用户从未签到

 楼主| 发表于 2009-11-8 13:33:32 | 显示全部楼层
问题已经解决了.RTT里面不能使用非2次幂的纹理。
我将Camera的大小设置为1024后解决了.

但是 Attach到Image的时候 不管纹理大小是多大都是可以的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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