2014-11-09 6 views
1

텍스처의 행이 오프셋되어있는 문제가 있습니다. 테스트로서 나는 GL_RGBA에서 /로 512x4 텍스처를 만들고 있습니다. sizeof (_color) outputs 4. X에서 검정색에서 파란색으로 바뀌는 그래디언트 여야합니다. 때로는 행의 1/3 정도의 손상된 결과로 끝나는 것처럼 오프셋에서 읽은 것처럼 보입니다. 폭).OpenGL 텍스처 오프셋 문제

빨강 및 녹색 채널에서 UV 좌표를 출력하도록 프래그먼트 셰이더를 변경하면 UV 좌표가 0,0 (TL) 1,0 (TR), 0 , 1 (BL) 및 1,1 (BR)을 포함한다. 어쨌든 이것이 UV 문제가되는 것을 나는 볼 수 없습니다.

OSX에서 SDL2를 사용하고 있습니다. 문제의 원인 일 수 있습니다. 결과는 Linux/SDL2에서 좋았 기 때문에 어떤 변수가이 문제를 일으킬 수 있는지 전혀 알지 못합니다. gl_FragColor (적색 = U, 녹색 = V) UV output

텍스처 참조 매핑

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로 변경 : texture2D (u_texture, VEC2 (v_uv.x 0.0)); (0으로 강제 됨) V (or UV.y) coordinate set to 0

+1

정렬 문제 일 수 있습니다. 텍스처 데이터를 업로드하기 전에 glPixelStore로 적절한 GL_UNPACK_ ... 매개 변수를 설정하십시오. – datenwolf

+0

확실하게 실현 가능합니다. 나는 https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStore.xml에서 볼 수있는 정보를 기반으로 매개 변수를 설정할 것이다. (표 참조) – Kyle

+0

감사합니다. GL_UNPACK_ROW_LENGTH는 640으로 설정되었습니다. 가장 확실하게 오프셋의 차이. 나는 그것을 대답으로 받아 들일 수 있습니다. – Kyle

답변

1

정렬 문제 일 수 있습니다. 텍스처 데이터를 업로드하기 전에 glPixelStore로 적절한 GL_UNPACK_ ... 매개 변수를 설정하십시오.