Re: [程式] 如何用OpenGL切割圖片?

看板GameDesign (遊戲設計)作者 (aiur)時間18年前 (2007/02/20 21:18), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/6 (看更多)
※ 引述《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)
文章代碼(AID): #15slKKTv (GameDesign)
文章代碼(AID): #15slKKTv (GameDesign)