gpt4 book ai didi

android - 绘制到 FrameBuffer 会导致 Y 反转

转载 作者:行者123 更新时间:2023-12-03 14:55:53 26 4
gpt4 key购买 nike

我想使用帧缓冲区来使用着色器程序创建图像。
这很好用,除了 Y 是倒置的。
似乎左下角变成了左上角。
为什么会这样?这是正常的吗?
这是否发生在所有安卓设备上?

在我的着色器程序中gl_FragCoord将反转 Y,这取决于我是直接绘制到帧缓冲区还是直接绘制到屏幕上。

最佳答案

我发现绘制到 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 不会反转。

关于android - 绘制到 FrameBuffer 会导致 Y 反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56009462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com