【发布时间】: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 个三角形)。此外,三角形的边缘看起来完全不合规。看起来像黑魔法,真的(或平台问题)。