gpt4 book ai didi

c - OpenGL 纹理偏移问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:14 24 4
gpt4 key购买 nike

我遇到了纹理行被偏移的问题。作为测试,我正在从/到 GL_RGBA 创建一个 512x4 纹理。 sizeof(_color) 输出 4。它应该只是 X 上从黑色到蓝色的渐变。看起来它是从偏移量读取的,因为有时它以损坏的结果结束,持续大约 1/3 行(宽度)。

如果我将片段着色器更改为在红色和绿色 channel 上输出 UV 坐标,我会得到看起来设置正确的 UV 坐标,例如 0,0 (TL) 1,0 (TR), 0, 1 (BL) 和 1,1 (BR)。无论如何,我看不出这是一个紫外线问题。

我在 OSX 上使用 SDL2,这可能是问题的根源。结果在 Linux/SDL2 上很好,所以我完全不知道什么状态变量可能导致这种情况。

OpenGL texture offset

typedef struct {
unsigned char r,g,b,a;
} _color;

glGenTextures(1, &self->id);
glBindTexture(GL_TEXTURE_2D, self->id);

_color* c = (_color*)malloc(sizeof(_color) * 512 * 4);
_color* pc = c;
for( int y = 0; y < 4; y++ )
for( int x = 0; x < 512; x++ ) {
pc->r = 0;
pc->g = 0;
pc->b = (u_char)((float)x / (float)512 * 255.0);
pc->a = 255;
pc++;
}

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, (void *)c);

printf("glGetError = %d\n", glGetError()); // Outputs no error

free(c);

UV 映射到 gl_FragColor(红色 = U,绿色 = V) UV output

纹理查找更改为:texture2D(u_texture, vec2(v_uv.x, 0.0)); (y 强制为 0) V (or UV.y) coordinate set to 0

最佳答案

可能是对齐问题。在上传纹理数据之前,使用 glPixelStore 设置正确的 GL_UNPACK_… 参数。

关于c - OpenGL 纹理偏移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832576/

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