【问题标题】:Distortion/Water in WebGLWebGL 中的失真/水
【发布时间】:2011-08-20 13:41:21
【问题描述】:

我对 WebGL 和 OpenGL 还比较陌生,但最近几天我已经把大部分时间都花在了为它编写一个小游戏上。但是,当我想实现像热浪或任何形式的失真之类的东西时,我就陷入了困境。

现在,我可以使用片段着色器制作纹理波纹,但在扭曲对象背后的内容时,我觉得我错过了一些东西。有什么方法可以获取已经在片段着色器中渲染的像素的颜色?

我尝试过渲染到纹理,然后让对象的纹理成为这样,但是如果您选择将场景渲染到纹理,您也无法将其渲染到屏幕上。除此之外,如果要渲染到纹理,则该纹理必须是 2 的幂(许多屏幕分辨率不太适合)

任何帮助将不胜感激。

【问题讨论】:

    标签: webgl distortion


    【解决方案1】:

    您将不得不渲染到纹理并将该纹理绘制到屏幕上同时扭曲它。此外,在 OpenGL ES 2.0(这是 WebGL 使用的图形 API)中,不要求帧缓冲区对象的大小必须是 2 的幂。但非二次幂纹理不能有 mipmapping 或纹理包装。

    【讨论】:

    • 嗯,我不认为有一种方法可以将我已将其余元素绘制到屏幕上的帧缓冲区绘制到屏幕上,是吗?我的意思是,现在我假设我只需要用帧缓冲区作为纹理在其上制作一个正方形,以便对其进行渲染。但如果有什么方法我可以直接将帧缓冲区应用到屏幕上,那会更好。
    • 不,您将不得不使用带纹理的四边形在屏幕上手动绘制它。但无论如何,练习的重点不就是扭曲它吗?
    • 嗯,是的,不是的。我试图只扭曲非常小的区域。 (即在火上扭曲)所以没有必要扭曲整个屏幕。
    【解决方案2】:

    我相信你可以modify individual canvas pixels directly。可能是影响小区域的好方法,但可能不是 gpu 加速的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2021-07-16
      • 2021-09-14
      相关资源
      最近更新 更多