Как обрезать ПОГРУЖЕННОЕ изображение - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь обрезать изображение, загруженное благодаря библиотеке SOIL, перед использованием его в качестве текстуры.

  • Итак, сначала, как я могу загрузить изображение, и , затем преобразовать его в текстуру?
  • А во-вторых, как изменить (обрезать и т. д.) загруженное изображение?

Это то, что я хотел бы сделать:

unsigned char * img = SOIL_load_image("img.png", &w, &h, &ch, SOIL_LOAD_RGBA);
// crop img ...
// cast it into GLuint texture ...

1 Ответ

1 голос
/ 18 октября 2019

Вы можете загрузить часть своего изображения, используя функциональность glPixelStorei:

// the location and size of the region to crop, in pixels:
int cropx = ..., cropy = ..., cropw = ..., croph = ...;

// tell OpenGL where to start reading the data:
glPixelStorei(GL_UNPACK_SKIP_PIXELS, cropx);
glPixelStorei(GL_UNPACK_SKIP_ROWS, cropy);

// tell OpenGL how many pixels are in a row of the full image:
glPixelStorei(GL_UNPACK_ROW_LENGTH, w);

// load the data to a previously created texture
glTextureSubImage2D(texure, 0, 0, 0, cropw, croph, GL_SRGB8_ALPHA8, GL_UNSIGNED_BYTE, img);

Вот диаграмма из спецификации OpenGL, которая может помочь: subimage diagram

РЕДАКТИРОВАТЬ: Если вы используете более старый OpenGL (старше 4.5), то замените вызов glTextureSubImage2D на:

glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8_ALPHA8, cropw, croph, 0, GL_RGBA, GL_UNSIGNED_BYTE, img);

Убедитесь, что создали и связали текстурудо этого вызова (так же, как вы обычно создаете текстуры).

...