【发布时间】:2011-10-28 18:35:37
【问题描述】:
在 OpenGL 中,如何从使用 IMG_Load() 加载的图像文件中选择一个区域?
(我正在为简单 2D 游戏制作瓷砖地图)
我使用以下原理将图像文件加载到纹理中:
GLuint loadTexture( const std::string &fileName ) {
SDL_Surface *image = IMG_Load(fileName.c_str());
unsigned object(0);
glGenTextures(1, &object);
glBindTexture(GL_TEXTURE_2D, object);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
SDL_FreeSurface(image);
return object;
}
然后我使用以下内容在我的渲染部分中实际绘制纹理:
glColor4ub(255,255,255,255);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2d(0,0); glVertex2f(x,y);
glTexCoord2d(1,0); glVertex2f(x+w,y);
glTexCoord2d(1,1); glVertex2f(x+w,y+h);
glTexCoord2d(0,1); glVertex2f(x,y+h);
glEnd();
现在我需要一个函数,它允许我从调用loadTexture( const std::string &fileName ) 得到的GLuint 中选择某些矩形部分,这样我就可以使用上面的代码将这些部分绑定到矩形然后将它们绘制到屏幕上。类似的东西:
GLuint getTileTexture( GLuint spritesheet, int x, int y, int w, int h )
【问题讨论】:
-
谢谢。在我的案例中,我需要将什么作为最后一个论点?
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA, GL_UNSIGNED_BYTE, const GLvoid * data);我不再拥有 SDL_Surface,我只有通过调用loadTexture()获得的 GLuint。你能写一个简短的例子吗?
标签: c++ opengl sdl tiles clipping