在C中的opengl中绘制纹理

时间:2014-06-16 15:34:52

标签: c opengl textures

我尝试使用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)。 基本上该函数来自here,但我更改了它,因此它将获得所有这些参数。 知道如何解决我的问题并使代码按我想要的方式工作吗?

1 个答案:

答案 0 :(得分:0)

我想ww和hh是你的高度和高度... ...

使用glTranslatef,如果你使用ww和hh为它的params,你可以移动所有东西。尝试改变

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 调整大小。