Как я могу получить значение глубины из текстуры глубины? - PullRequest
2 голосов
/ 30 августа 2011

У меня заполненная текстура глубины, но, похоже, из нее не получается правильное значение.

код GLSL, фрагментный шейдер:

uniform sampler2D depth_tex;
uniform float viewport_w;
uniform float viewport_h;

void main()
{
    vec2 coord = vec2(gl_FragCoord.xy);
    float depth = texture2D(depth_tex, vec2(coord.x / viewport_w, coord.y / viewport.h)).r;
    float c = material_amb * depth; // material_amb is preset by host
    out_color = vec4(c, c, c, 1.0f);
}

Я ожидаю, что цвет модели будет изменяться глубиной вершин, но я не могу видеть все. Конечно, я могу видеть модель без умножения глубины. Тип текстуры глубины: GL_DEPTH_COMPONENT, GL_FLOAT. В чем проблема? Я думаю, что решение для получения значения глубины из текстуры является неправильным, но я не знаю причину. Где хранится значение глубины? И как я могу получить значение глубины?

1 Ответ

3 голосов
/ 30 августа 2011

тип текстуры глубины: GL_DEPTH_COMPONENT, GL_FLOAT

Это не имеет смысла. GL_FLOAT не формат изображения OpenGL . GL_DEPTH_COMPONENT - это формат изображения, но он не размерен. Он задает нормализованный формат глубины без знака неопределенного размера.

GL_FLOAT это, вероятно, то, что вы указали в параметре секунд после конца в вызове glTexImage, верно? Это параметр передача пикселей ; он описывает данные пикселей, которые вы копируете в текстуру, а не способ хранения данных пикселей внутри текстуры. OpenGL может конвертировать между различными форматами данных.

Если ваши данные глубины поступают из рендеринга в буфер глубины, то вы должны понять, как преобразовать нелинейное пространство после проецирования в линейное пространство перед проекцией, прежде чем вы сможете что-то значимое использовать с этими данными. Этот ответ показывает, как выполнить преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...