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

Alpha в тени

Страницы: 1 2 Следующая »
#0
15:36, 14 мая 2010

Всем доброго дня.

Сделал тени(OpenGL) Shadow Map(depth-texture). Но возникла проблема, объекты с прозрачностью отбрасывают свою "геометрическую" тень, а не то, что с прозрачностью.

Рендею объект вот так(и в SM и в сцену):

void RenderAlpa()
{
    glDisable(GL_CULL_FACE);

     glEnable(GL_ALPHA_TEST);
     glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

        Ent->Render(setka);

     glDisable(GL_BLEND);
     glDisable(GL_ALPHA_TEST);

    glEnable(GL_CULL_FACE);
}
#1
15:47, 14 мая 2010

Ну тут два вихода: либо не рисовать такие объекты вообще, либо рисовать их еще и в специальную текстуру, в которой будет храниться их прозрачность. Если я тебя правильно понял. Если нет - попробуй glAlphaFunc(GL_GREATER, 0.25)

#2
15:53, 14 мая 2010

Хм, просто читал, что в SM нет проблемы с отрисовкой теней от Alpha поверхностей.

рисовать их еще и в специальную текстуру

А если рендерить сцену не в depth, а сохранять глубину сцены шейдером в что-то типа RGBA_8/16?

#3
15:56, 14 мая 2010

При рендере в глубину надо включить альфатест... Если хочешь, чтобы прозрачность тени зависела от альфы, то дополнительная текстура (дополнительно хранить с глубиной, если например это RGBA)...

#4
15:56, 14 мая 2010

зачем blending ?

#5
16:03, 14 мая 2010

Так я рисую модель в depth-texture с уже включенной прозрачностью(как и в сцену).

прозрачность тени зависела от альфы

Если говорить просто, то мне нужны дырки в тени :). А под зависела от альфы, имеется ввиду, что "яркость дырок" зависит от значения в alpha канале текстуры? Если да, то такого не требуется(во всяком случае пока).


-----------------------------

Переписал так:

void RenderAlpha()
{
  glDisable(GL_CULL_FACE);
  glEnable(GL_ALPHA_TEST);
  glAlphaFunc(GL_GREATER, 0.5);

                   Ent->Render(setka);

  glDisable(GL_ALPHA_TEST);
  glEnable(GL_CULL_FACE);

}

Изображение

Вообщем, на сетке вылезли какие-то пятна(ползают вместе с вращением камеры), а на заднем фоне видна тень от "коробки"(а хочется сетку)

#6
16:21, 14 мая 2010

BenTech
выведи shadowMap отдельно на экран, ортопроекция

#7
17:07, 14 мая 2010

А как вытащить из Depth текстуры картинку? А то белый квадрат рисуется.

#8
17:09, 14 мая 2010

BenTech
> А как вытащить из Depth текстуры картинку? А то белый квадрат рисуется.
переключи в luminance
или шейдером

#9
17:21, 14 мая 2010

BenTech
> Если говорить просто, то мне нужны дырки в тени :). А под зависела от альфы,
> имеется ввиду, что "яркость дырок" зависит от значения в alpha канале текстуры?
> Если да, то такого не требуется(во всяком случае пока).

Алтернативно можно заюзать Discard

PS: Хотя у меня в OpenGL discard жёстко артефачит, ATI Radeon HD 5770 (Catalyst 10.3, OpenGL Version 6.14), Vista SP2 (Platform Updated to support DirectX11

#10
17:24, 14 мая 2010

МЫЛО
> Хотя у меня в OpenGL discard жёстко артефачит,

а конкретно ?

#11
17:25, 14 мая 2010
glGenTextures(1, &texDepth2);
glBindTexture(GL_TEXTURE_2D, texDepth2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_LUMINANCE);

Вместо белого стало еле заметное серое мерцание.

А шейдером как?

#12
17:27, 14 мая 2010

BenTech
> серое мерцание.

серое - это глубина, а мерцание - это баг :)

шейдером - вынимешь значение из depthTexture, перекодируешь в rgba и рисуешь, ну сделай для глубины pow( depth, 4 )  ещё

#13
17:36, 14 мая 2010

innuendo
> а конкретно ?
разными цветами рендер "прёт" в тех местах, где отрисовка должна быть отменена
на дрова пока грешу

BenTech
> А шейдером как?

в шейдере записи глубины

if(texture.a < ALPHATEST_FACTOR)
    discard;
#14
17:40, 14 мая 2010

МЫЛО
> > а конкретно ?
> разными цветами рендер "прёт" в тех местах, где отрисовка должна быть отменена

проверим

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

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