2011-10-18 5 views
5

주어진 파일에서 RGB의 바이트 배열을로드한다고 가정합니다.OpenGL 텍스처를 뒤집어 야합니까?

나는 OpenGL이 텍스처를 "반대로"저장하는 것을 좋아하고, 이미지를 저장 한 데모 프로그램이 거꾸로 뒤집어 진 것을 보았습니다.

내 프로그램에서로드 된 RGB 배열을 바이트 단위로 또는 라인 단위로 바꾸어야합니까?

답변

6

Bitmap (.bmp) 형식이 거꾸로 된 선을 저장하기 때문입니다. 나는 누가 그것을 생각해 냈는지는 모르지만, 파일 형식의 것입니다. 그래, 네. 자신의 .bmp 로더를 사용한다면 그렇게해야합니다. 그러나 이미 작성된 이미지를 사용하여 "거꾸로 뒤" 이미지를 사용할 수 있습니다. 다시 말하지만, 그것은 .bmp 일뿐입니다. OpenGL은 반전되지 않은 이미지에서 기본적으로 작동합니다.

는 여기에 약간의 트릭 : 당신이 당신의 .BMP 로더를 변경하지 않으려면, 당신은 당신을 위해 이미지를 뒤집기는 OpenGL을 알 수 있습니다 :

나는 "기본적으로"로 무엇을 의미하는 것이
glMatrixMode(GL_TEXTURE); 
glLoadIdentity(); 
glScalef(1.0f, -1.0f, 1.0f); 
glMatrixMode(GL_MODELVIEW); 

. 원하는 경우 OpenGL을 뒤집을 수 있습니다. 그러나 이것은 만 .bmp 파일을로드하는 경우에만 작동합니다. 다른 파일 형식은 해당 행을 올바르게 저장합니다. 따라서 첫 번째 방법을 선호합니다. 실제 .bmp 로더를 사용합니다.

그냥 명확합니다 : 당신이 .bmp 파일을로드 할 경우, 당신은 MUST 플립 이미지 중 하나를 손으로 (대부분의 .BMP 로더가 할)는 OpenGL로 보내기 전에, 또는가에 unflipped 이미지를 전송 OpenGL을 사용하고 렌더링 코드 앞에 위의 코드를 추가하십시오.

+0

실제로 모든 뒤집힌 이미지는 BMP입니다. 하지만 OpenGL이 텍스처 좌표를 사용하는 방법은 어떨까요? (0,0)은 마지막 줄의 첫 번째 픽셀에 있고, 나는 맞고 첫 번째 줄의 마지막 픽셀은 (1,1)입니까? 올바른 것으로 배열을 뒤집을 필요가 없습니까? –

+0

글쎄, 달려있어! 원시 BMP 데이터를 가져 와서 OpenGL로 보내면 예 (0,0)가 갑자기 첫 번째 줄의 첫 번째 픽셀이됩니다. 다시 (0,0)을 첫 번째 줄의 마지막 픽셀이되게하려면 배열을 뒤집어 OpenGL에 보내야합니다. 대안은 위의 Texture-matrix-scaling 코드입니다. –

+0

@catfish_deluxe_call_me_cd 아니요! (0,0)은 첫 번째 줄의 첫 번째 픽셀입니다. OpenGL에서 이미지의 선은 아래에서 위로 정렬되지만 원점은 이미지 데이터의 첫 번째 행의 첫 번째 픽셀에 남아 있습니다 ** ** 사용자는 OpenGL에 전송합니다. –

관련 문제