주어진 파일에서 RGB의 바이트 배열을로드한다고 가정합니다.OpenGL 텍스처를 뒤집어 야합니까?
나는 OpenGL이 텍스처를 "반대로"저장하는 것을 좋아하고, 이미지를 저장 한 데모 프로그램이 거꾸로 뒤집어 진 것을 보았습니다.
내 프로그램에서로드 된 RGB 배열을 바이트 단위로 또는 라인 단위로 바꾸어야합니까?
주어진 파일에서 RGB의 바이트 배열을로드한다고 가정합니다.OpenGL 텍스처를 뒤집어 야합니까?
나는 OpenGL이 텍스처를 "반대로"저장하는 것을 좋아하고, 이미지를 저장 한 데모 프로그램이 거꾸로 뒤집어 진 것을 보았습니다.
내 프로그램에서로드 된 RGB 배열을 바이트 단위로 또는 라인 단위로 바꾸어야합니까?
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을 사용하고 렌더링 코드 앞에 위의 코드를 추가하십시오.
실제로 모든 뒤집힌 이미지는 BMP입니다. 하지만 OpenGL이 텍스처 좌표를 사용하는 방법은 어떨까요? (0,0)은 마지막 줄의 첫 번째 픽셀에 있고, 나는 맞고 첫 번째 줄의 마지막 픽셀은 (1,1)입니까? 올바른 것으로 배열을 뒤집을 필요가 없습니까? –
글쎄, 달려있어! 원시 BMP 데이터를 가져 와서 OpenGL로 보내면 예 (0,0)가 갑자기 첫 번째 줄의 첫 번째 픽셀이됩니다. 다시 (0,0)을 첫 번째 줄의 마지막 픽셀이되게하려면 배열을 뒤집어 OpenGL에 보내야합니다. 대안은 위의 Texture-matrix-scaling 코드입니다. –
@catfish_deluxe_call_me_cd 아니요! (0,0)은 첫 번째 줄의 첫 번째 픽셀입니다. OpenGL에서 이미지의 선은 아래에서 위로 정렬되지만 원점은 이미지 데이터의 첫 번째 행의 첫 번째 픽셀에 남아 있습니다 ** ** 사용자는 OpenGL에 전송합니다. –