簡體   English   中英

OpenGL紋理偏移問題

[英]OpenGL texture offset issue

我遇到了紋理的行被偏移的問題。 作為測試,我正在GL_RGBA中創建512x4紋理。 sizeof(_color)輸出4。它應該是X上從黑色到藍色的漸變。它看起來像是從偏移量中讀取的,有時它的結尾是損壞的結果,持續大約行的1/3(寬度)。

如果更改片段着色器以在紅色和綠色通道上輸出UV坐標,則會得到看起來正確設置的UV坐標,例如0,0(TL)1,0(TR),0,1(BL )和1,1(BR)。 無論如何,我看不到這是紫外線問題。

我在OSX上使用SDL2,這可能是問題的根源。 在Linux / SDL2上,結果是很好的,所以對於什么狀態變量可能導致這種情況我一無所知。

OpenGL紋理偏移

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) 紫外線輸出

紋理查找更改為:texture2D(u_texture,vec2(v_uv.x,0.0)); (y強制為0) V(或UV.y)坐標設置為0

可能是對齊問題。 在上載紋理數據之前,請使用glPixelStore設置適當的GL_UNPACK_…參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM