C 如何裁剪土壤加载的图像

C 如何裁剪土壤加载的图像,c,opengl,soil,C,Opengl,Soil,我试图裁剪一个图像加载感谢土壤库,然后使用它作为纹理 首先,我如何加载图像,然后将其转换为纹理 其次,如何修改(裁剪等)加载的图像 这就是我想做的: unsigned char * img = SOIL_load_image("img.png", &w, &h, &ch, SOIL_LOAD_RGBA); // crop img ... // cast it into GLuint texture ... 您可以使用glPixelStorei功能加载图像的一部分:

我试图裁剪一个图像加载感谢土壤库,然后使用它作为纹理

  • 首先,我如何加载图像,然后将其转换为纹理
  • 其次,如何修改(裁剪等)加载的图像
这就是我想做的:

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

您可以使用
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规范中的一个图表,可能会有所帮助:

编辑:如果您使用的是较旧的OpenGL(早于4.5),则将
glTextureSubImage2D
调用替换为:

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

请确保在此调用之前创建并绑定纹理(与通常创建纹理的方式相同)。

谢谢。我首先加载图像并保存其尺寸。然后,我加载了相同的文件,但作为纹理。但是当我想用
glTextureSubImage2D
裁剪它时,函数没有定义(OpenGL V3.0)。但是,
glTexSubImage2D
是可调用的,但是第一个参数不再是纹理。我从那开始,医生让我有点困惑…现在它显示的是裁剪过的图像,但是Y反转了。这似乎很正常,所以我会处理的。谢谢!