4

我有一个 Android 4.0 应用程序,它使用 GL_OES_EGL_image_external 方法将视频渲染为 OpenGL 表面。这很好用。此外,我想在此之上拉伸/扭曲一些补丁。我目前正在对那些我想在这些区域顶部的一些四边形上使用一些额外的着色器进行扭曲的区域进行着色。我被困在如何获得基础颜色上。视频四边形顶部的四边形上的着色器如何扭曲底层图像?可能吗?

4

1 回答 1

3

我在 iOS 上,但我的应用程序做了非常相似的事情。

我是如何实现它的,是基于Apple 的一些示例代码(尤其是 RippleModel.m)。它的工作原理是,它将视频纹理视频不是放在四边形上,而是放在高度镶嵌的网格上,所以你有大量的三角形和大量的纹理坐标。它以编程方式创建此网格的顶点——更重要的是,它也以编程方式创建纹理坐标——并将它们保存在一个数组中。

对于每一帧,它遍历所有顶点并更新每个顶点的纹理坐标,根据用户触摸的位置以及周围顶点的纹理偏移量将它们“扭曲”成波纹图案。所以几何体根本没有改变,它们不会在着色器中执行扭曲,这一切都是在纹理坐标中完成的;然后着色器只是在它收到的坐标上进行直接的纹理查找。

所以很难说这种方法是否能满足你的需要,但如果你的扭曲只发生在 2d 中,并且如果你能弄清楚如何将你的扭曲定义为纹理坐标调整,这可能会有所帮助。

于 2012-10-20T02:15:48.707 回答