作者zergaiur (aiur)
看板GameDesign
标题Re: [程式] 如何用OpenGL切割图片?
时间Tue Feb 20 21:18:11 2007
※ 引述《littleshan (我要加入剑道社!)》之铭言:
: 把这张小图画出来的时间大致由以下几个因素决定:
: 1. 小图在萤幕上的面积
: 2. 你使用的 texture filter
: 3. 绘图硬体的能力 (texture unit 的数量与速度)
: 和整张 texture 的大小并没有很明显的关系
: 用 texture coordinate 来切图是很有效也很常见的做法
: 不过你这样的写法的确还有进步空间
: 那就是每张小图的 texture coordinate 都是固定的
: 所以你没必要每次 render 时都重新计算一次
: 而且使用 glBegin() / glEnd() 画东西的效率极差
: 用 vertex array 会比较快,或是 vbo
Vertex Array 或 vbo .... 这两个我倒是没听过~
我只是写2D的小游戏...
如果要把程式改成这两种方法不知道要怎麽改
我程式码大概是这样:
void cImageFile::ShowImage(int x, int y,int alpha) //Show图
{
glBindTexture(GL_TEXTURE_2D, id);
glColor4f(1.0,1.0,1.0,(float)alpha/255);
glBegin(GL_POLYGON);
glTexCoord2f(0,1); glVertex2f(x+xy[0][0], y+xy[0][1]);
glTexCoord2f(1,1); glVertex2f(x+xy[1][0], y+xy[1][1]);
glTexCoord2f(1,0); glVertex2f(x+xy[2][0], y+xy[2][1]);
glTexCoord2f(0,0); glVertex2f(x+xy[3][0], y+xy[3][1]);
glEnd();
glColor4f(1.0,1.0,1.0,1.0);
}
void cImageFile::LoadImage(char* FileName) //读取图
{
fp.Open(FileName,0);
image.LoadBMP(fp,0,0); //将BMP的 bitmap解析出来~
glGenTextures(1,&id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.W, image.H, 0,
GL_BGRA_EXT, GL_UNSIGNED_BYTE, image.Bits_RGBA);
xy[0][0] = 0; xy[0][1] = 0;
xy[1][0] = (float)image.W; xy[1][1] = 0;
xy[2][0] = (float)image.W; xy[2][1] = (float)image.H;
xy[3][0] = 0; xy[3][1] = (float)image.H;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.216.0.159
※ 编辑: zergaiur 来自: 61.216.0.159 (02/20 21:18)