Russian Qt Forum

Qt => OpenGL => Тема начата: navrocky от Декабрь 18, 2015, 10:42



Название: Реализация преломления в фрагментных шейдерах
Отправлено: navrocky от Декабрь 18, 2015, 10:42
Пытаюсь разобраться как сделать эффект преломления в фрагментном шейдере, но не соображу как мне получить пиксель из выходного буфера?

Надо сперва сцену отрисовывать в текстуру, а потом эту текстуру передавать в шейдер, или всё таки есть возможность использовать выходной буфер в качестве текстуры для шейдера?

Интересует решение без привязки к Qt, т.к. проект на чистом OpenGL.


Название: Re: Реализация преломления в фрагментных шейдерах
Отправлено: Igors от Декабрь 18, 2015, 12:12
Надо сперва сцену отрисовывать в текстуру, а потом эту текстуру передавать в шейдер, или всё таки есть возможность использовать выходной буфер в качестве текстуры для шейдера?
Думаю без текстуры не обойтись, хотя бы потому что выходной буфер перекрывается тем же шейдером. Да и чтение из него (glReadPixels) медленное.

А вообще здесь главное - удачно задать "кривизну". И, возможно, анти-алиас придется самому писать. Что впрочем хорошо, делом займетесь  :)


Название: Re: Реализация преломления в фрагментных шейдерах
Отправлено: navrocky от Декабрь 18, 2015, 12:31
Думаю без текстуры не обойтись, хотя бы потому что выходной буфер перекрывается тем же шейдером. Да и чтение из него (glReadPixels) медленное.

А вообще здесь главное - удачно задать "кривизну". И, возможно, анти-алиас придется самому писать. Что впрочем хорошо, делом займетесь  :)

Ну у меня преломление по идее должно быть простое, 2d волны так сказать. Ну в общем я понял, что мысль пошла правильно, спасибо. Буду рендерить сцену в текстуру и потом её же использовать как исходную текстуру для фрагментых шейдеров. Буду разный пост-процессинг реализовывать.

А glReadPixels вроде как к шейдерам не имеет отношения?


Название: Re: Реализация преломления в фрагментных шейдерах
Отправлено: Igors от Декабрь 18, 2015, 13:03
А glReadPixels вроде как к шейдерам не имеет отношения?
Как из шейдера читать - не знаю. Чуть больше про АА. Когда при преломлении лучи расходятся, то "общий" AA не спасает, рез-т получается рваным/зубатым, т.к. ловятся точки текстуры достаточно далеко друг от друга. Поэтому надо считать матрицу суб-пикселей (хотя бы 3x3), аккуратно вычисляя нормаль и позицию для каждого суб-пикселя. 90% работы обычно с этим