[英]Drawing a texture in opengl in C
我嘗試使用SOIL加載紋理並使用我創建的函數對其進行繪制,該函數獲取紋理及其許多詳細信息-然后進行繪制。
問題是-當我繪制時-圖片的位置會隨着寬度和高度的變化而變化。 我不希望這樣-我希望它選擇左下角的點並從該點開始繪制,就像在這幅畫中一樣: http : //postimg.org/image/kalv23v3p/ (原諒我糟糕的計算機繪畫技巧),所以我可以-例如-制作一個HP桿,該桿可以在相同的X和Y位置保持不變並在相同的位置上保持不變。 問題(根據我對功能的理解)在glTranslatef
:P中
void DrawImage(char filename,
int xx,
int yy,
int ww,
int hh,
int angle,
int xp,
int yp)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, filename);
glLoadIdentity();
glTranslatef(xx + (ww / 2),yy + (hh / 2),0.0);
glRotatef(angle,0.0,0.0,1.0);
glTranslatef(-(xx + (ww / 2) + xp),-(yy + (hh / 2) + yp),0.0);
// Draw a textured quad
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(xx,yy);
glTexCoord2f(0, 1); glVertex2f(xx,yy + hh);
glTexCoord2f(1, 1); glVertex2f(xx + ww,yy + hh);
glTexCoord2f(1, 0); glVertex2f(xx + ww,yy);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glEnd();
}
當filename
實際上是紋理本身時(通常為GLuint)。 基本上該函數是從這里開始的,但是我對其進行了更改,以便它將獲取所有這些參數。 任何想法如何解決我的問題並使代碼按我希望的方式工作?
我猜ww和hh是您的with和height參數...
如果使用ww和hh作為參數,則使用glTranslatef可以移動所有內容。 嘗試改變
glTranslatef(xx + (ww / 2),yy + (hh / 2),0.0);
至
glTranslatef(xx, yy, 0.0);
和
glTranslatef(-(xx + (ww / 2) + xp),-(yy + (hh / 2) + yp),0.0);
至
glTranslatef(-(xx + xp),-(yy + yp),0.0);
現在,如果要調整大小,請不要使用glTranslatef。 使用glScalef調整大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.