osg 屏幕坐标 第三个参数如何获得,它表示什么意义
我是用 rect() 获取ui界面 长和宽 ,这是屏幕坐标的x,y。但第三个参数0不对,转不成osg::Vec3d。
求大神 指导下这个第三个参数 获得方法。
在OSG中,屏幕坐标由vec3表示,包含x、y和z三个元素。
第三个元素z表示深度值,它表示该点到摄像机视点的距离,可以用于实现基于距离的渲染效果。
获得屏幕坐标第三个元素z的方法:
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表示该点距离摄像机的深度信息,可以用于实现基于距离的雾效、遮挡关系等效果。获取方法是通过投影矩阵变换获得。