Re: [程式] 如何用OpenGL切割圖片?
※ 引述《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)
討論串 (同標題文章)
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章