osgearth屏幕坐标定义?
#defineM(row,col)m
voidTransform_Point(doubleout,constdoublem,constdoublein){
out=M(0,0)*in+M(0,1)*in+M(0,2)*in+M(0,3)*in;
out=M(1,0)*in+M(1,1)*in+M(1,2)*in+M(1,3)*in;
out=M(2,0)*in+M(2,1)*in+M(2,2)*in+M(2,3)*in;
out=M(3,0)*in+M(3,1)*in+M(3,2)*in+M(3,3)*in;
}
osg::Vec3dWorldToScreen(osgViewer::View*view,osg::Vec3worldpoint){
doublein,out;
in=worldpoint._v;
in=worldpoint._v;
in=worldpoint._v;
in=1.0;
//获得当前的投影矩阵和模型视图矩阵
osg::MatrixprojectMatrix=view->getCamera()->getProjectionMatrix();
osg::MatrixviewprojectMatrix=view->getCamera()->getViewMatrix();
//下面计算模型视图矩阵*投影矩阵*视口窗口变换矩阵
doublemodelViewMatrix;
memcpy(modelViewMatrix,viewprojectMatrix.ptr(),sizeof(GLdouble)*16);
Transform_Point(out,modelViewMatrix,in);
doublemyprojectMatrix;
memcpy(myprojectMatrix,projectMatrix.ptr(),sizeof(GLdouble)*16);
Transform_Point(in,myprojectMatrix,out);
if(int(in*100000)==0){
returnosg::Vec3d(0,0,0);
}
in/=in;
in/=in;
in/=in;
intviewPort;
osg::Viewport*myviewPort=view->getCamera()->getViewport();
viewPort=0;
viewPort=0;
viewPort=mConfigure->GetScreenWidthPixel();//横向象素点
viewPort=mConfigure->GetScreenHeightPixel();//纵向象素点
//计算三维点在屏幕上的二维投影点
osg::Vec3dsceenPoint;
sceenPoint._v=(int)(viewPort+(1+in)*viewPort/2+0.5);
sceenPoint._v=(int)(viewPort+(1+in)*viewPort/2+0.5);
sceenPoint._v=0;
returnsceenPoint;
}