我想使用着色器程序使用帧缓冲区来创建图像。 这很好,除了Y是倒置的。 似乎左下角变为左上角。 为什么会这样?这正常吗? 这会在所有android设备上发生吗?
根据我是直接绘制到帧缓冲区还是直接绘制到屏幕上,我的着色器程序gl_FragCoord
内的Y将反转。
答案 0 :(得分:0)
我发现绘制到FrameBuffer不会反转Y,但是会向opengl加载位图。
这些是我的纹理顶点:
public final static float textureVertices[] = {
0.0f, 1.0f, // top left
0.0f, 0.0f, // bot left
1.0f, 1.0f, // top right
1.0f, 0.0f, // bot right
};
但是那些已经被倒置以解决倒置的位图了,我认为这很正常,但是对于opengl来说,这是正常的:
public final static float textureVertices[] = {
0.0f, 0.0f, // bot left
0.0f, 1.0f, // top left
1.0f, 0.0f, // bot right
1.0f, 1.0f, // top right
};
因此,如果我从这样的位图创建纹理:
public static int loadGLTexture(Bitmap bmp) { // also destroys bitmap
int id[] = new int[1];
id[0] = -1;
GLES20.glGenTextures(1, id, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id[0]);
// Set Filters
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0); // upload the texture to OpenGL
bmp.recycle();
return id[0];
}
纹理将具有反转的Y,但是如果我使用opengl创建空纹理并使用FrameBuffer在其上绘制,则Y不会反转。