OSG 屏幕坐标第三个参数

osg 屏幕坐标 第三个参数如何获得,它表示什么意义

我是用 rect()  获取ui界面 长和宽 ,这是屏幕坐标的x,y。但第三个参数0不对,转不成osg::Vec3d。

求大神 指导下这个第三个参数 获得方法。

在OSG中,屏幕坐标由vec3表示,包含x、y和z三个元素。
第三个元素z表示深度值,它表示该点到摄像机视点的距离,可以用于实现基于距离的渲染效果。
获得屏幕坐标第三个元素z的方法:

  1. 通过osg::Camera::getProjectionMatrix()获取摄像机的投影矩阵,然后用模型坐标乘以投影矩阵,可以得到clip空间坐标。
  2. clip空间坐标的z元素即是深度值,范围在-1到1之间。
  3. 将clip空间坐标转换到范围0-1的屏幕空间,就是最终的屏幕坐标xyz。
    示例代码:
osg::Camera* camera = ...; 

osg::Matrix projMatrix = camera->getProjectionMatrix();

osg::Vec3 modelPos = ...; 
osg::Vec3 clipPos = projMatrix * modelPos;
float zdepth = clipPos.z() * 0.5 + 0.5;
osg::Vec3 screenPos(clipPos.x()/clipPos.w(), clipPos.y()/clipPos.w(), zdepth);

所以屏幕坐标的z表示该点距离摄像机的深度信息,可以用于实现基于距离的雾效、遮挡关系等效果。获取方法是通过投影矩阵变换获得。