使用OpenGL ES 2.0处理图像时出现问题

时间:2011-03-15 14:42:33

标签: opengl-es textures

我创建了一个简单的应用程序,它使用片段着色器获取输入图像并输出已处理的图像。使用2 ^ n图像时,没问题。但是,如果我使用矩形非2次幂图像,我会从上到下运行黑色针迹。

这是原作:

enter image description here

这是在处理之后:

enter image description here

这是我的片段着色器:

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个顶点,然后使用下一个(最后)3个)。

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

enter image description here enter image description here

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

enter image description here enter image description here

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

2 个答案:

答案 0 :(得分:1)

我们是在看一块图像还是整个图片?问,因为三角形边界不对齐。

也就是说,每个非神器像素都是两幅图像之间的完美匹配,我认为这种错误可以排除我想到的一个错误。不仅如此,工件实际上是基于完全擦除的单个颜色通道。 (对于每个3个像素的系列,第一个具有R = 0,第二个具有G = 0,并且第三个具有B = 0)。

总而言之,这看起来像是与着色器或绘图完全无关的错误。你确定它不是在读取内存时踩踏的东西吗?它也可能是一个平台错误(h / w,驱动程序......)。它可以在多个平台上重现吗?

答案 1 :(得分:0)

似乎司机不好。更新它们解决了这个问题。