繁体   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