我有一个Android 4.0应用程序,它使用GL_OES_EGL_image_external方法将视频渲染为OpenGL表面。这很好用。另外,我想在这之上拉伸/扭曲几个补丁。我目前正在对那些我希望在这些区域顶部的一些四边形上添加一些着色器的区域进行着色。我坚持如何获得底层颜色。我在视频四边形顶部的四边形上的着色器如何扭曲底层图像?有可能吗?
答案 0 :(得分:3)
我在iOS上,但我的应用程序做的非常相似。
我是如何实现它的基于一些sample code from Apple(特别是看RippleModel.m)。它是如何工作的,它将视频纹理视频放在四边形上,而不是放在高度镶嵌的网格上,所以你有大量的三角形,有大量的纹理坐标。它以编程方式创建此网格的顶点 - 更重要的是,它还以编程方式创建纹理坐标 - 并将它们保存在数组中。
对于每个帧,它遍历所有顶点并更新每个顶点的纹理坐标,根据用户触摸的位置以波纹图案“扭曲”它们,并基于周围顶点具有多少纹理偏移。因此,几何体根本不会改变,并且它们不会在着色器中执行扭曲,它们都在纹理坐标中完成;然后,着色器只是在它收到的坐标上进行直线纹理查找。
因此很难说这种方法是否适合您的需求,但如果您的扭曲只发生在2d,如果您可以弄清楚如何将扭曲定义为纹理坐标调整,这可能会有所帮助。