从 sprite_sheet 坐标创建纹理
Create texture from sprite_sheet coordinates
我有一个sprite_sheet(例子sheet):
我加载为矢量数据,我需要从指定区域制作新纹理。像这样:
const std::vector <char> image_data = LoadPNG("sprite_sheet.png"); // This works.
glMakeTexture([0, 0], [50, 50], configs, image_data) //to display only one sqm.
但我不知道怎么做,因为大多数 GL 函数只能在整个区域工作,比如 glTexImage2D。
// Only have width and height, the bottomLeft coords is 0, 0 -- I want to change this.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &(_sprite_sheet.data[0]));
有没有办法在不加载完整 sprite_sheet 作为纹理的情况下做到这一点?
OBS:我正在使用 picoPNG 解码 PNG,我可以加载 png,但不能从指定区域制作纹理。
因为你没有显示代码,我假设:
char *data; // data of 8-bit per sample RGBA image
int w, h; // size of the image
int sx, sy, sw, sh; // position and size of area you want to crop.
glTexImage2D
确实支持感兴趣区域。你这样做:
glPixelStorei(GL_UNPACK_ROW_LENGTH, w);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, sx);
glPixelStorei(GL_UNPACK_SKIP_ROWS, sy);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // LodePNG tightly packs everything
glTexImage2D(GL_TEXTURE_2D, level, internalFormat, sw, sh, border, format, type, data);
我有一个sprite_sheet(例子sheet):
我加载为矢量数据,我需要从指定区域制作新纹理。像这样:
const std::vector <char> image_data = LoadPNG("sprite_sheet.png"); // This works.
glMakeTexture([0, 0], [50, 50], configs, image_data) //to display only one sqm.
但我不知道怎么做,因为大多数 GL 函数只能在整个区域工作,比如 glTexImage2D。
// Only have width and height, the bottomLeft coords is 0, 0 -- I want to change this.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &(_sprite_sheet.data[0]));
有没有办法在不加载完整 sprite_sheet 作为纹理的情况下做到这一点?
OBS:我正在使用 picoPNG 解码 PNG,我可以加载 png,但不能从指定区域制作纹理。
因为你没有显示代码,我假设:
char *data; // data of 8-bit per sample RGBA image
int w, h; // size of the image
int sx, sy, sw, sh; // position and size of area you want to crop.
glTexImage2D
确实支持感兴趣区域。你这样做:
glPixelStorei(GL_UNPACK_ROW_LENGTH, w);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, sx);
glPixelStorei(GL_UNPACK_SKIP_ROWS, sy);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // LodePNG tightly packs everything
glTexImage2D(GL_TEXTURE_2D, level, internalFormat, sw, sh, border, format, type, data);