RaZOR
>в чем может быть проблема? к MRT прицеплена текстура gl_depth_component, в нее
>глубина пишется вроде нормально ( во всяком случае можно разглядеть едва
>заметные силуэты)
нечего не понял.
void main(void)
{
vec3 nn = normalize(n);
gl_FragData[0] = vec4(1.0, 1.0, 1.0, 1.0);
gl_FragData[1] = p;
gl_FragData[2] = vec4( nn, z);
}
пишешь в gl_FragData[2] = vec4( nn, z);
что у тебя attach к RT2 ?
RaZOR
извини, тут на работе запарка :) чуть позже
innuendo
RT0 - цвет
RT1 - позиция
RT2 - нормаль (в альфе - глубина)
и еще дополнительно есть текстура gl_depth_component, которая прицеплена к мрт как gl_depth_attachment. Вот так
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_RECTANGLE_ARB, depthMap, 0);
RaZOR
vec4 sample2d = sample3d * matProj;
замени на
vec4 sample2d = gl_ProjectionMatrix * sample3d;
тогда worldPos - это eyePos ( точка в пространстве камеры )
RaZOR
float DecodeZ( float depth ) {
return( zNear / zFar - depth* ( zFar - zNear ) ) * zFar;
}
восстановление глубины по depth
innuendo
>замени на
>vec4 sample2d = gl_ProjectionMatrix * sample3d;
зачем? на втором проходе в gl_ProjectionMatrix лежит матрица ортогональной проекции (там же рисуется ScreenQuad).
я думал надо умножать на проекционную матрицу камеры, откуда делали рендер сцены, или я неправ?
RaZOR
>innuendo
>>замени на
>>vec4 sample2d = gl_ProjectionMatrix * sample3d;
>зачем? на втором проходе в gl_ProjectionMatrix лежит матрица ортогональной
>проекции (там же рисуется ScreenQuad).
>я думал надо умножать на проекционную матрицу камеры, откуда делали рендер
>сцены, или я неправ?
да, точно. :)
если подозрения на матрицу проекции - передай её как textureMatrix
сейчас такую фишку обнаружил : если заменить sample2d = sample2d * 0.5; на sample2d = sample2d * 0.25; то тогда получаеться нормальная проекция о__О. Может это потому, что экран не квадратный и надо учитывать размеры clipspace ?
RaZOR
>Если проекция правильная, то может быть я не правильно передаю матрицу в шейдер?? делаю так glUniformMatrix4fv(uni_matProj, 1, false, pr);
покопался в своих исходниках - у меня стоит GL_TRUE там где у тебя false :)
попробуй "вынуть" projMatrix и передать как textureMatrix - тогда точно будешь знат что дело не в проекции :)
> покопался в своих исходниках - у меня стоит GL_TRUE там где у тебя false :)
из спеков: void UniformMatrix{234}{f}v( int location, sizei count, boolean transpose, const float *value );
а зачем нам транспонировать проекционную матрицу? :)
RaZOR
>> покопался в своих исходниках - у меня стоит GL_TRUE там где у тебя false :)
>из спеков: void UniformMatrix{234}{f}v( int location, sizei count, boolean
>transpose, const float *value );
>а зачем нам транспонировать проекционную матрицу? :)
:) это у меня матрицы передаются транспонированными
передай через textureMatrix
innuendo
передал через textureMatrix, картинка такая же: рисуется по середине в полэкрана и растягиваеться по сторонам
RaZOR
>innuendo
>передал через textureMatrix, картинка такая же: рисуется по середине в
>полэкрана и растягиваеться по сторонам
скрин выложи
![ssao ssao | [OGL+GLSL] SSAO](https://gamedev.ru/files/images/ssao_2.jpg)
ЗЫ: Под чайником должен быть квад :)
RaZOR
типа normalMap :)
Тема в архиве.