|
我首先把一个GIS图层切分为了四格.这四格的大小是一样大的.GIS图形本身肯定是不规则的.但是我在图层里面填充上了很多多边形(用一个大矩形减去当前所有的实际数据,就得到填充的多边形了).这样整个图形就是一个非常规则的矩形了.
我首先用RTT的方式 把整个矩形输出到一个Image,这个Image没有任何问题.
然后我把这个矩形切割为同样大小的四块,然后分别输出,结果这四块中的右边两块依然是没有问题的,胆识左边的两块就不对了,其中左上的那块下面有白边,左下的那块上面有白边.
然后我再把这个四块分别切成四块,出来的结果就更乱了.大部分的图片都有白边.
如果把这些白边都裁掉后,这些图形是能够拼接在一起的.
做过Rtt的人有出现过类似的情况吗?
下面是代码:- void RttCameraHandler::applyCamera( Camera* camera,const string& name,Image* img){
- //找到二维的GIS节点,这些节点将会被渲染到纹理然后输出
- Group* txtNode=findTxtNode(name);
- if(!txtNode) return;
- //计算这些节点的外接面
- ComputeBoundsVisitor v;
- txtNode->accept (v);
- BoundingBox box=v.getBoundingBox ();
-
- int w=(box.xMax ()-box.xMin());
- int h=(box.yMax ()-box.yMin());
- //固定图片的宽度为1024,根据二维节点的宽高比来计算出图片的高度
- int txt_width=1024,txt_height=0;
- txt_height=(int)(txt_width*1.0*h/w);
- //设置Camera
- camera->setClearColor(osg::Vec4(1.f,1.f,1.f,1.0f));
- camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- camera->setProjectionMatrix(osg::Matrix::ortho2D(-w/2,w/2,-h/2,h/2));
-
- camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
- camera->setViewport(0,0,txt_width,txt_height);
- camera->setRenderOrder(osg::Camera::POST_RENDER);
- camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
- //控制Camera的姿态.此段代码将Camera的姿态控制为从Z正方向 垂直向下看
- HowtoManipulator mani(NULL);
- mani.setNode(txtNode);
- mani.home(0);
- camera->setViewMatrix(mani.getInverseMatrix());
- img->allocateImage(txt_width, txt_height, 1, GL_RGBA, GL_UNSIGNED_BYTE);
- camera->attach(osg::Camera::COLOR_BUFFER,img);
- camera->removeChildren (0,camera->getNumChildren ());
- camera->addChild(txtNode);
- }
复制代码 在这个代码前
是new Camera并加入到场景根节点的代码,
然后传递不同的名字(每一个网格都有一个编号)来调用这个代码.
然后输出到本地的文件里面去.文件名对应网格编号.
不知道是不是Camera的参数设置的有问题. |
|