2011-03-09 3 views
1

Я относительно новичок в WebGL и OpenGL тоже, но в последние дни я наполнил большую часть своего времени, написав для этого небольшую игру. Однако, когда я хотел реализовать что-то вроде тепловых волн или каких-либо искажений, я остался застрявшим.Искажение/Вода в WebGL

Теперь, я могу сделать текстуру пульсации, используя шейдер фрагмента, но я чувствую, что мне что-то не хватает, когда дело доходит до искажения содержимого объекта. Есть ли способ захватить цвет пикселя, который уже был отображен в шейдере фрагмента?

Я попытался выполнить рендеринг текстуры, а затем текстуру объекта будет такой, но она появится, если вы решите визуализировать свою сцену на текстуру, вы также не можете отобразить ее на экране. И кроме того, если вы хотите визуализировать текстуру, эта текстура должна быть мощью двух (что многие разрешения экрана не совсем подходят)

Любая помощь будет оценена.

ответ

1

Вам придется визуализировать текстуру и нарисовать эту текстуру на экране, искажая ее. Кроме того, нет требования, чтобы объекты framebuffer имели размер в два раза в OpenGL ES 2.0 (который использует API-интерфейс графического API). Но текстуры без силы двух не могут иметь mipmapping или текстурирование.

+0

Хм, я не думаю, что есть способ просто нарисовать фреймбуфер, который я нарисовал остальными элементами на экране, не так ли? Я имею в виду, прямо сейчас я предполагаю, что мне просто нужно сделать квадрат с фреймбуфером как текстуру на нем, чтобы он отображался. Но если есть какой-то способ, я могу просто взять фреймбуфер и прямо применить его к экрану, который «будет лучше». – Skiphs

+0

Нет, вам придется вручную нарисовать его на экране с текстурированным квадрантом. Но не все ли смысл упражнения искажать его? – kusma

+0

Ну да и нет. Я пытаюсь исказить только очень маленькие области. (то есть искажения выше огня), поэтому нет необходимости искажать весь экран. – Skiphs