osgFBO(16), qedl bajo proyección en perspectiva

El qedl bajo la proyección ortogonal se introdujo anteriormente. De hecho, también hay un modo de perspectiva. De acuerdo con el movimiento de la posición de la cámara, las secciones lejanas y cercanas cambian constantemente, por lo que se requiere una compensación de profundidad.
Ahora mismo

float fixDepth(profundidad flotante)
{ if (PerspectiveMode == 1) { //'1/z' corrección de transformación de búfer de profundidad profundidad = (2.0 * ZM * Zm) / ((ZM + Zm) - (2.0 * profundidad - 1.0 ) * (ZM - Zm)); //eventualmente queremos que la profundidad caiga entre 0 y 1 profundidad = (profundidad - Zm) / (ZM - Zm); }






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

}

La sección cercana y lejana se calcula a partir de la siguiente fórmula. Se llama una vez cada vez que cambia la pose de la cámara.
osg::ref_ptrosg::Camera camera = view->getCamera();
double fovy, aspect, zNear, zFar;
camera->getProjectionMatrixAsPerspective(fovy, aspect, zNear, zFar);
mientras se actualiza el valor del shader

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


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

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

Supongo que te gusta

Origin blog.csdn.net/directx3d_beginner/article/details/130949824
Recomendado
Clasificación