【问题标题】:Issues when processing an image using OpenGL ES 2.0使用 OpenGL ES 2.0 处理图像时的问题
【发布时间】:2011-08-28 15:20:19
【问题描述】:

我制作了一个简单的应用程序,它接受输入图像并使用片段着色器输出处理后的图像。使用 2^n 图像时没关系。但是,如果我使用矩形非 2 次方图像,我会得到一个从上到下运行的黑色针迹。

这是原文:

这是处理后的:

这是我的片段着色器:

precision mediump float;
uniform vec2 uSize;
uniform sampler2D sTexture;
void main()
{
    gl_FragColor = texture2D(sTexture, vec2(gl_FragCoord) / uSize)
}

其中,uSize 是具有图像大小的 vec2

通常我可以使用 2 次方纹理,但由于 OGLES2 支持矩形纹理,我想省去一些工作。

谢谢!

更新

这里是我的顶点:

static GLfloat vVertices[] =
    {
     -1.0f,  1.0f, 0.0f,
     -1.0f, -1.0f, 0.0f,
      1.0f, -1.0f, 0.0f,

      1.0f, -1.0f, 0.0f,
      1.0f,  1.0f, 0.0f,
     -1.0f,  1.0f, 0.0f,
    };

这是顶点着色器:

attribute vec4 vPosition;
void main()
{
   gl_Position = vPosition;
}

更新

现在,这很奇怪。这是分别渲染的两个三角形(首先使用前 3 个顶点,然后使用下一个(最后一个)三个顶点)。

这里是方形图像(如预期的那样):

下面是相同的三角形如何查找矩形图像/纹理。它们看起来奇怪

它们看起来根本不像三角形。有谁知道发生了什么?

【问题讨论】:

  • 问题可能出在您的绘图代码而不是着色器中(特别是顶点位置)。愿意发布吗?
  • “其中,uSize 是具有图像大小的 vec2” - 这是不正确的。它应该包含屏幕大小,因为您将屏幕坐标 (gl_FragCoord) 除以它。
  • 屏幕大小和glSetView()设置的一样吗?如果是,那么 uSize 应该是正确的,因为为 FBO 对象调用了glSetView
  • 确实是因为我的顶点的定位...
  • 我真的不明白那种布局。它不以任何方式、形状或形式对应于您显示的顶点数据(尽管它看起来确实像 3 个三角形)。此外,三角形的边缘看起来完全不合规。看起来像黑魔法,真的(或平台问题)。

标签: opengl-es textures


【解决方案1】:

我们是在看图像的一部分还是完整的东西?问,因为三角形边界不与对角线对齐。

也就是说,每一个非伪影像素都是两张图像之间的完美匹配,我认为这排除了我想到的一个错误。不仅如此,这个伪影实际上是基于一个被完全擦除的颜色通道。 (对于每组 3 个像素,第一个具有 R=0,第二个具有 G=0,第三个具有 B=0)。

总而言之,这看起来像是一个与着色器或绘图完全无关的错误。你确定这不会影响阅读后的记忆吗?它也可能是一个平台错误(硬件,驱动程序......)。它可以在多个平台上重现吗?

【讨论】:

  • 嗯,我不知道,但我认为这不太可能是平台错误。而且,是的,这是输入到 GPU 的完整图像,我只将其裁剪为不规则尺寸,然后在我的应用中使用它。
【解决方案2】:

似乎司机很糟糕。更新它们解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多