一、背景
最近项目使用资源中,为了减小资源大小,将多个资源图片合并为一张图片,本文将介绍如何读取雪碧图的特定位置纹理并渲染。
二、实现
样例图片
- 计算雪碧图指定纹理坐标
std::vector<Vector2> vecTexUV;
//图片有几行数据
int lines = 2;
//图片有几列
int column = 5;
//index 显示第几个图标
GLuint LoadTextures(int index)
{
GLuint uTexId = 0u;
int32_t resID = pItem->m_resID;
std::string path = "XXXXXXX"; //文件路径,包含文件名
std::ifstream ifs(path);
if (!ifs.is_open()) {
return uTexId;
}
std::ostringstream os;
os << ifs.rdbuf();
std::string res = os.str();
ifs.close();
//TODO ImageData为自定义的一个image类,存放图片相关信息; decodeImage为自己写的文件数据解析接口(后续会在另一个文章中详述)
ImageData image = decodeImage(res);
//第几行(从0开始)
int lineNumber = index / column;
//第几个图(从0开始)
int lineIndex = type %