library instalar opengl libpng

opengl - library - instalar libpng



Usando libpng para "dividir" una imagen en segmentos (1)

No tienes que jugar con extraer las fichas. Puede decirle a OpenGL que solo use una parte de los datos que le da para inicializar la textura. La palabra clave es glPixelStorei (GL_UNPACK ...) parámetros. Supongamos que su imagen de entrada tiene dimensiones img.width e img.height y hay 4 bytes en un píxel RGB, es decir, un relleno de bytes para cada píxel y su subimagen está definida por subimg.off_x , subimg.off_y , subimg.width , subimg.height Entonces puedes cargarlo así:

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)

Intento usar libpng para dividir una imagen en diferentes fragmentos. La razón es que no puedo cargar una textura de más de 512x512 en el hardware en el que estoy trabajando actualmente. Lo logré antes con una mezcla de SDL y SDL_Image. Básicamente utilicé el argumento srcrect en SDL_BlitSurface para copiar solo una parte de la imagen que luego convertí en una textura OpenGL. Combine eso con un simple bucle horizontalmente y luego verticalmente. Pude obtener una variedad de texturas cada una de 512x512 como máximo. Entonces fue solo una cuestión de renderizarlos en la posición correcta.

En este momento, no tengo el lujo de usar SDL, así que pensé que es posible hacerlo directamente a través de libpng. Basado en Google, creo que solo es cuestión de usar png_read_rows para leer qué partes necesito. Pero ahí es donde estoy estancado, no estoy exactamente seguro de cómo hacer eso.

Además, si te preguntas por qué no me limito a dividir las imágenes en gimp / photoshop / paint o lo que sea, es porque no las controlo y las estoy descargando en tiempo de ejecución.

Gracias por la ayuda por adelantado.