Войти
ПрограммированиеФорумГрафика

OpenGL :: Рендер глубины в текстуру (4 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#45
10:20, 22 дек. 2017

Попробовал, работает.
Правда в силу доступности в настоящий момент только GL3.3 приходится немного иначить

glBindTexture ( GL_TEXTURE_2D, texture );
glTexImage2D ( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, screenWidth, screenHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr );
glBindTexture ( GL_TEXTURE_2D, 0 );
glFramebufferTexture ( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture, 0 );


#46
10:23, 22 дек. 2017

PA3UJIb
Буду курочить :) а возможно содержимое рендербуфера слить в текстуру?
Хотя странно :) сейчас текстура без msaa выдала наоборот белый фон!

#47
10:39, 22 дек. 2017

Daniil Petrov

а возможно содержимое рендербуфера слить в текстуру?

Сие мне неизвестно ибо сам нуп. Быть может если как-то скопировать содержимое Renderbuffer и конвертировать.
Daniil Petrov
сейчас текстура без msaa выдала наоборот белый фон!

Ну. Это, я так думаю, зависит от того, каким цветом ты фреймбуфер чистишь.
#48
11:10, 22 дек. 2017

Daniil Petrov
> а возможно содержимое рендербуфера слить в текстуру?
Нет.

Автор, чекай glGetError после каждого вызова, смотри debug output, чекай framebuffer completeness после аттача текстур, сделай себе макросы или шаблоны для всего этого, смотри лог компилятора и линкера шейдеров. А то так можно много времени в потёмках блуждать. На крайний случай можешь в RenderDoc'е полазить.

#49
11:28, 22 дек. 2017

dayllenger
Понял :)

#50
5:10, 26 дек. 2017

В случае с белой картинкой (GL_TEXTURE_2D) разобрался, пришлось добавить в шейдер следующий код:

float LinearizeDepth(float zoverw)
{
  float n = 1.0; // camera z near
  float f = 20000.0; // camera z far
  return (2.0 * n) / (f + n - zoverw * (f - n));
}

void main()
{
  float depth = texture2D(depthImg, gl_TexCoord[0].xy).r;
  depth = LinearizeDepth(depth)*77;

  gl_FragColor = vec4(depth, depth, depth, 1.0);
}
Конечно, получилось не совсем корректно даже после установки Near и Far на свои, но по крайней мере уже видно глубину :)
Ну а с чёрной картинкой (GL_TEXTURE_2D_MULTISAMPLE) уже будет проще разобраться :)))

#51
7:16, 26 дек. 2017

вообщето депз текстуру можно получить и без фбо....

#52
9:02, 26 дек. 2017

barnes
Подскажи способ попроще

#53
9:27, 26 дек. 2017

Daniil Petrov
> Ну а с чёрной картинкой (GL_TEXTURE_2D_MULTISAMPLE) уже будет проще разобраться

ну-ну

#54
10:16, 26 дек. 2017

innuendo
> ну-ну
Да уж, тут тоже говна хватает :))) ну по крайней мере появилась картинка при отключенном MSAA, хотя LinearizeDepth тут явно какой-то кривой попался :)

#55
10:38, 26 дек. 2017

Daniil Petrov
Знаешь, иногда полезно изучать опенсорс движки. Там много чего интересного можно накопать.
Короче. Создаешь депт текстуру.

  

  qglGenTextures (1, &depthMap->texnum);
  qglBindTexture (GL_TEXTURE_RECTANGLE, depthMap->texnum);
  qglTexParameteri (GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  qglTexParameteri (GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  qglTexParameteri (GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  qglTexParameteri (GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  qglTexImage2D (GL_TEXTURE_RECTANGLE, 0, GL_DEPTH_COMPONENT24, vid.width, vid.height, 0,
    GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
Создали при загрузке.
Потом рисуем непрозрачную геометрию, и после ее отрисовки вызываем такую шнягу
void R_CaptureDepthBuffer()
{
    
  if (r_newrefdef.rdflags & RDF_NOWORLDMODEL)
    return;
  GL_MBindRect(GL_TEXTURE0, depthMap->texnum);
  qglCopyTexSubImage2D(GL_TEXTURE_RECTANGLE, 0, 0, 0, 0, 0, vid.width, vid.height);
}
ВСЕ.А ты тут уже 4 страницы мозги разными глупостями выносишь.
#56
10:41, 26 дек. 2017

Daniil Petrov
> хотя LinearizeDepth тут явно какой-то кривой попался :)

float DecodeDepth (const in float x, const in vec2 parms) {
  return parms.x / (parms.y - x);
}
Первый параметр депт текстура, второй - минз-макс сцены
#57
10:53, 26 дек. 2017

barnes
> Знаешь, иногда полезно изучать опенсорс движки. Там много чего интересного можно накопать.
Приму к сведению!

#58
20:54, 26 дек. 2017

barnes
А что это вообще за функция такая GL_MBindRect??? У меня GLEW её не понимает!
И зачем q перед функциями GL?

#59
21:03, 26 дек. 2017

Daniil Petrov
> И зачем q перед функциями GL, когда ни у кого таких нету?
Ох... имена переменных хранящих указатели ну функции изменили.

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.