2015-06-19 6 views
0

Я хочу преобразовать координату экрана в координату мира в Directx 11. Я обнаружил, что могу легко это сделать с помощью функции XMVector3Unproject. Есть один улов, я хочу выбрать свою собственную координату Z, чтобы рассказать о том, как далеко от камеры моя точка (экранные координаты 2d, мировые координаты - 3d). Из того, что я наблюдал, я должен выяснить, какова позиция моей точки в буфере глубины.XMVector3Unproject - Экран к координате мира по конкретному Z

Мой буфер глубины составляет от 0,0 до 1,0 (обычный случай). Мой ближайший самолет - 0.1f и дальняя дальность 1000.0f. Я знаю, что значения в буфере глубины НЕ распределяются равномерно. Фактически, для моей настройки 20.0f находится где-то около 0.995 на буфере глубины (близко к ближайшей плоскости, но почти полностью вниз в буфере глубины). Как определить эти значения?

ответ

0

Эта формула работает:

z'=(far+near)/(2*(far-near))+1/z*(-far*near)/(far-near)+1/2

, где z это расстояние от камеры (20 в моем примере выше) near и far являются ближнего и дальнего отсечения плоскостей (0,1 и 1000 соответственно). Источник: Z-buffering