c - 在 C 中的 opengl 中绘制纹理

标签 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但我改变了它所以它会得到所有这些参数。 知道如何解决我的问题并使代码按我希望的方式工作吗?

最佳答案

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

关于c - 在 C 中的 opengl 中绘制纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247299/

相关文章:

c++ - 如何在ros包中使用sdk(非ros header/lib/binaries)?

c++ - 为什么 Doom3 会切换列主矩阵和行主矩阵?

ios - OpenGL格式纹理

opengl - Wavefront *.OBJ 文件中的第三个纹理坐标

three.js - 如何通过.mtl文件中的map_Kdtexture.png控制模型上的纹理重复

c - 从 C 中的 FFT 阵列中删除 1000Hz 音调

C选择排序谬误,不会对最后3个数字进行排序

c - 在 Linux 中检测 RS-232 com 端口

opengl - OpenGL 上的级联阴影贴图纹理访问错误

c++ - 缩放以匹配大小