【问题标题】:fisheye effect using opengles使用opengles的鱼眼效果
【发布时间】:2016-08-18 01:39:32
【问题描述】:

我想使用 opengl 2.0 在 android 上做鱼眼效果,我可以不使用 opengl,但这不是我想要的,因为这效率低且不支持视频纹理。我也用Android Media Effects API测试了鱼眼效果,但效果看起来不太好。

我也搜索fishshader如下:

private static final String FISHEYE_FRAGMENT_SHADER =
    "precision mediump float;\n" +
    "uniform sampler2D u_Texture;\n" +
    "uniform vec2 vScale;\n" +
    "const float alpha = float(4.0 * 2.0 + 0.75);\n" +
    "varying vec2 v_TexCoordinate;\n" +
    "void main() {\n" +
    "  float bound2 = 0.25 * (vScale.x * vScale.x + vScale.y * vScale.y);\n" + 
    "  float bound = sqrt(bound2);\n" +
    "  float radius = 1.15 * bound;\n" +
    "  float radius2 = radius * radius;\n" +
    "  float max_radian = 0.5 * 3.14159265 - atan(alpha / bound * sqrt(radius2 - bound2));\n" + 
    "  float factor = bound / max_radian;\n" + 
    "  float m_pi_2 = 1.570963;\n" +
    "  vec2 coord = v_TexCoordinate - vec2(0.5, 0.5);\n" +
    "  float dist = length(coord * vScale);\n" +
    "  float radian = m_pi_2 - atan(alpha * sqrt(radius2 - dist * dist), dist);\n" +
    "  float scalar = radian * factor / dist;\n" +
    "  vec2 new_coord = coord * scalar + vec2(0.5, 0.5);\n" +
    "  gl_FragColor = texture2D(u_Texture, new_coord);\n" +
    "}\n";

这是我想要的,但我不知道如何使用它。谁能给我一些线索。

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    Android OpenGL ES 确实(通常)支持视频纹理。它不是严格意义上的 OpenGL ES API 的一部分,但您通常可以通过 Android SurfaceViews 将视频表面作为 EGL 外部图像导入。

    网上有很多类似的问题,但是这个 SO 问题应该提供一个有用的起点:

    Android. How play video on Surface(OpenGL)

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 2016-05-20
      • 2016-01-06
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多