osgFBO(16)、透視投影下の qedl

先ほど正射影でのqedlを紹介しましたが、実は遠近モードもあり、カメラ位置の移動に応じて遠近が常に変化するため、奥行き補正が必要になります。
たった今

float fixDepth(float Depth)
{ if (PerspectiveMode == 1) { //'1/z' 深度バッファ変換補正深度 = (2.0 * ZM * Zm) / ((ZM + Zm) - (2.0 * 深度 - 1.0) ) * (ZM - Zm)); //最終的には深さを 0 と 1 の間にする必要がありますDepth = (深さ - Zm) / (ZM - Zm); }






return clamp(1.0 - depth, 0.0, 1.0);

}

近遠区間は次の式で計算されます。カメラのポーズが変更されるたびに 1 回呼び出されます。
osg::ref_ptrosg::Camera Camera = view->getCamera();
double fovy、aspect、zNear、zFar;
Camera->getProjectionMatrixAsPerspective(fovy、aspect、zNear、zFar);
シェーダ値の更新中

void ccEDL::setNearPlane(float zNear)
{ _zNear = zNear; _zNearUniform->set(_zNear); }


void ccEDL::setFarPlane(float zFar)
{ _zFar = zFar; _zFarUniform->set(_zFar);

_zNearUniform = new osg::Uniform(“ Zm
”, _zNear);
_zFarUniform = 新しい osg::Uniform(“ZM”, _zFar);

おすすめ

転載: blog.csdn.net/directx3d_beginner/article/details/130949824