2011-01-26 2 views
2

libpng를 사용하여 이미지를 여러 청크로 분할하려고합니다. 그 이유는 내가 현재 작업하고있는 하드웨어에 512x512보다 큰 텍스처를로드 할 수 없기 때문입니다. 이전에 SDL과 SDL_Image를 혼합하여이 작업을 수행했습니다. 기본적으로 SDL_BlitSurface의 srcrect 인수를 사용하여 이미지의 일부만 복사 한 다음 OpenGL 텍스처로 변환했습니다. 그것을 단순한 루프와 수평으로 결합한 다음 수직으로 텍스처 배열을 최대 512x512까지 얻을 수있었습니다. 그런 다음 올바른 위치에 렌더링하는 것이 문제였습니다.libpng를 사용하여 이미지를 세그먼트로 나누기

지금 당장은 SDL을 사치스럽게 사용하지 않아서 libpng을 통해이 작업을 직접 수행 할 수 있다고 생각했습니다. 일부 인터넷 검색을 기반으로 그냥 png_read_rows를 사용하여 필요한 부분을 읽는 것이 중요하다고 생각합니다. 하지만 그게 내가 꼼짝 못하는 곳이야, 정확히 어떻게할지는 모르겠다.

왜 내가 gimp/photoshop/paint에서 이미지를 분할하지 않는지 궁금하다면, 그것들을 제어하지 않고 런타임에 다운로드하기 때문입니다.

미리 도움을 주셔서 감사합니다.

답변

4

타일 추출 작업을 망칠 필요가 없습니다. 텍스처를 초기화하기 위해 데이터의 일부만 사용하도록 OpenGL에 지시 할 수 있습니다. 키워드는 glPixelStorei (GL_UNPACK ...) 매개 변수입니다. 입력 이미지의 크기가 img.widthimg.height이고 RGB 픽셀에 4 바이트, 즉 각 픽셀에 대해 1 바이트의 패딩이 있고 하위 사진이 , subimg.off_y, subimg.width, subimg.height으로 정의됩니다. 그러면 다음과 같이로드 할 수 있습니다.

glPixelStorei(GL_UNPACK_ROW_LENGTH, img.width) 
glPixelStorei(GL_UNPACK_SKIP_PIXELS, subimg.off_x) 
glPixelStorei(GL_UNPACK_SKIP_ROWS, subimg.off_y) 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 
glTexImage2D(GL_TEXTURE_2D, GL_RGB, 0, 
      subimg.width, subimg.height, 0, 
      GL_RGBA, GL_UNSIGNED_BYTE, pixeldata) 
관련 문제