簡體   English   中英

在C中的opengl中繪制紋理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM