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

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

Страницы: 1 2 3 4 5 6 Следующая »
#60
21:44, 26 дек. 2017

Всё! Приаттачил текстуру глубины с трафаретом к буферу, в который сводятся все сэмплы MSAA, теперь текстура во всех случаях простая GL_TEXTURE_2D без MS :)))

glBlitFramebuffer(0, 0, screenWidth, screenHeight, 0, 0, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST);
Остался только один вопрос - при включенном MSSA текстура буфера глубины должна сглаживаться или нет? А то она у меня выходит не сглаженная :)


#61
2:29, 27 дек. 2017

Daniil Petrov
> А что это вообще за функция такая GL_MBindRect??? У меня GLEW её не понимает!
> И зачем q перед функциями GL?
это бинд ректангл текнстуры с кешированием. А q это для красоты. Просто указатель переименованый.

#62
9:11, 27 дек. 2017

barnes

Кончай тырить код из Quake. Уже второй раз замечаю, ты бы хоть ради уважения подписывал, что это из Q3
#63
9:23, 27 дек. 2017

0xc0de
Да не страшно :) всё равно мне этот код не помог.
Лучше бы кто подсказал - при включенном сглаживании текстура глубины должна сглаживаться или она остаётся не сглаженной?

#64
9:34, 27 дек. 2017

Daniil Petrov
> Лучше бы кто подсказал - при включенном сглаживании текстура глубины должна
> сглаживаться или она остаётся не сглаженной?

что такое сглаженная глубина?

#65
11:51, 27 дек. 2017

Daniil Petrov
> Лучше бы кто подсказал - при включенном сглаживании текстура глубины должна
> сглаживаться или она остаётся не сглаженной?
Она должна быть не тронутой, иначе потеряешь точность данных.

#66
12:45, 27 дек. 2017

DODge
> Она должна быть не тронутой, иначе потеряешь точность данных.
Всё понял :) а то даже представления не имел, должна сглаживаться или такой оставаться.
Ну она и остаётся нетронутой при включенном сглаживании.

#67
15:21, 27 дек. 2017

0xc0de
Значит так... Это не из ку3, а из 2, а во вторых это уже мои добавки и мой проект. Ясно? Вместо того чтобы с умным видом нести разную ахинею, лучше б промолчал. Глядишь за умного сошел бы...

#68
16:00, 27 дек. 2017

barnes
> разную ахинею

Примеры ахинеи?

#69
16:47, 27 дек. 2017

а кто написал что я копирую код из ку3? Рабинович?

#70
22:26, 27 дек. 2017

barnes
> а кто написал что я копирую код из ку3

q2, q3 - без разницы, копирайты никто не отменял

#71
1:16, 28 дек. 2017

Ты хоть в профиль ему загляни. Он автор чуток так известного в узких кругах quake2xp и его код вполне открыто лежит на сорсфорже.

#72
1:47, 28 дек. 2017

Ещё один вопрос: где можно найти адекватный Linearize Depth, т.е. нормализацию в диапазон [0; 1]???
Сколько функций перебрал, ни одна нормально не отображает глубину сцены.
Например, чуть отойдёшь от чего-нибудь, сразу теряется в тумане :)
Или хотя бы подскажите в каких пределах хранятся числа в буфере глубины, чтобы было от чего отталкиваться.

#73
7:07, 28 дек. 2017

Daniil Petrov

где можно найти адекватный Linearize Depth, т.е. нормализацию в диапазон [0; 1]

А знаешь, во фрагментном шейдере есть встроенная переменная gl_FragCoord.
Так что визуализацию глубины я делаю просто:
#version 330

out vec4 FragColor;

float near = 0.1;
float far  = 500.0;

float linear_depth ( float _depth );

void main ()
{
  // float depth = linear_depth ( gl_FragColor.z );  // 'тьфу, какой gl_FragColor!
  float depth = linear_depth ( gl_FragCoord.z );
  FragColor = vec4 ( vec3 ( 10.0 * depth ), 1.0 );  // <— 10.0 for more contrast
}

float linear_depth ( float _depth )
{
  // convert from WINDOW COORDs to NORMALIZED DEVICE COORDs
  float z = 2.0 * _depth - 1.0;
  // convert from NORMALIZED DEVICE COORDs to EYE COORDs
  return ( 2.0 * near ) / ( far + near - z * ( far - near ) );
}
#74
7:30, 28 дек. 2017

PA3UJIb
> А знаешь, во фрагментном шейдере есть встроенная переменная gl_FragCoord.
Видел в примерах, пробовал, но выходит чёрный экран. Возможно это потому, что я использую шейдер с буфером кадра без буфера глубины, она же текстура с нулевой глубиной, выводимая в ортогональной проекции при обработке постэффектов :)
Именно поэтому я и добавил текстуру глубины, чтобы её можно было передать на обработку в следующий буфер.
Кстати, у тебя почему-то написано:

float depth = linear_depth ( gl_FragColor.z );
вместо gl_FragCoord.z :))) А вообще значения этой переменной сильно отличаются от передаваемые через текстуру значения Z-буфера?
Просто я заменил gl_FragCoord.z значением текстуры глубины в твоём примере, но... либо нужно правильно настроить значение, на которое умножается linear_depth(depth)... либо тут ещё сильно влияют значения near и far...
Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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