Абсолютное ограничение до значения z-buffer (глубины буфера)

Я пытаюсь использовать z-буфер для измерения расстояний, но обнаружил неожиданную проблему.

Я знаю, что z-буфер возвращает число с плавающей запятой 0..1 через мой код:

    zImageData = new osg::Image;
zImageData->allocateImage(720, 576, 1, GL_DEPTH_COMPONENT ,GL_FLOAT); 
osgCam->setProjectionMatrixAsPerspective(45.0, 1.0, nearplane, farplane);
osgCam->setViewMatrixAsLookAt(osg::Vec3(0,0,camera_high), osg::Vec3(0,0,0),osg::Vec3(0,1,0) ); 
osgCam->attach(osg::Camera::DEPTH_BUFFER, zImageData);
//osgCam is my master camera.

Затем я постобработаю значение z-buffer с помощью функции обратного вызова:

  z = ((float*)sonar->zImageData->data())[1];

  float true_distance = farplane*nearplane/(farplane - z*(farplane-nearplane));

Все работает отлично, пока я не достигну 24 единиц расстояния, как показано ниже.


У меня есть 3 переменные, ближняя плоскость (область просмотра), farplane и camera_high. Последнее - это расстояние камеры от земли. Он смотрит на самолет (который должен быть землей). Это вывод программы:

const float nearplane = 0,2; const float farplane = 200;

const float camera_high = 5;
z value : 0.960961
z distance value : 5
*** Exited normally ***

const float camera_high = 10;
z value : 0.980981
z distance value : 10
*** Exited normally ***

const float camera_high = 20;
z value : 0.990991
z distance value : 20
*** Exited normally ***

const float camera_high = 23;
z value : 0.992297
z distance value : 22.9999
*** Exited normally ***

const float camera_high = 25;
z value : 1
z distance value : 200.003
*** Exited normally ***

const float nearplane = 20;

const float camera_high = 25;
z value : 1
z distance value : 200
*** Exited normally ***

const float camera_high = 23;
z value : 0.144928
z distance value : 23
*** Exited normally ***

const float nearplane = 24;

const float camera_high = 25;
z value : 1
z distance value : 200
*** Exited normally ***

Я просто не могу получить никакой разницы в z-буфере за пределами 24, несмотря на положение моей ближней и дальней плоскости.

0 ответов

Другие вопросы по тегам