GLSL конвертирует gl_FragCoord.z ​​в пространство глаз - PullRequest
1 голос
/ 07 февраля 2011

Это простой вопрос, и мне надоело искать в Интернете правильное уравнение.

Основная проблема состоит в том, что все предлагают сделать что-то вроде этого VS:

varying float depth;

depth = ( gl_ModelViewMatrix * gl_Vertex );

Но я не могу, потому что глубина хранится в текстуре.

Так или иначе, теперь я определил значение глубины и матрицу проекции, использованную для ее создания из координат пространства глаза.

Если вы не совсем понимаете, скажите мне, и я постараюсь сказать это лучше.

Заранее спасибо.:)

1 Ответ

3 голосов
/ 10 февраля 2011

Если вы извлекаете значение глубины из текстуры - оно находится в диапазоне [0,1].Сначала вам нужно масштабировать его до диапазона [-1,1], а затем применить обратную проекцию, чтобы получить глубину вида модели:

vec2 xy = vec2(x_coord,y_coord); //in [0,1] range
vec4 v_screen = vec4(xy, texture(samplerDepth,xy), 1.0 );
vec4 v_view = inverse(gl_ProjectionMatrix) * (2.0*(read_depth-vec3(0.5)));
float view_depth = v_view.z / v_view.w; //transfer from homogeneous coordinates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...