Open GL: - 填充四边形的部分,带颜色

ni3*_*cks 0 opengl

可能重复:
打开GL: - 四边形的填充部分

我是新手,开放Gl开发并开发一款游戏,我想展示玩家的能量水平.为此,我想填补四边形的一部分.

Plz帮助我创建q部分四边形,其中一部分被填充?

Jac*_*ker 11

我在OpenGL中制作了一些简单的健康栏.第一个是你要求的,其他的是为了好玩:)

为了说明,所有代码都在旧的OpenGL中.这些函数将health视为0到1之间的数字,并在y = 0处绘制一个高度为1.0的正方形,以Y轴为中心.屏幕截图显示了0.3,0.5和1.0的健康状况.

1)矩形的高度与健康成正比:

void drawHealth(float health) {
  glBegin(GL_QUADS);
    glColor3f(1, 0, 0);
    glVertex2f(0, 0);
    glVertex2f(1, 0);
    glVertex2f(1, health);
    glVertex2f(0, health);
  glEnd();
}
Run Code Online (Sandbox Code Playgroud)

drawHealth

2)矩形的颜色与健康成正比:

void drawHealth2(float health) {
  glBegin(GL_QUADS);
    glColor3f(health, 0, 0);
    glVertex2f(0, 0);
    glVertex2f(1, 0);
    glVertex2f(1, 1);
    glVertex2f(0, 1);
  glEnd();
}
Run Code Online (Sandbox Code Playgroud)

drawHealth2

3)此版本创建了一种渐变.动画时看起来不错,图片并不完全正义.

void drawHealth3(float health) {
  glBegin(GL_QUADS);
    glColor3f(1, 0, 0);
    glVertex2f(0, 0);
    glVertex2f(1, 0);
    glColor3f(health, 0, 0);
    glVertex2f(1, health);
    glVertex2f(0, health);
    glVertex2f(0, health);
    glVertex2f(1, health);
    glColor3f(0, 0, 0);
    glVertex2f(1, 1);
    glVertex2f(0, 1);
  glEnd();
}
Run Code Online (Sandbox Code Playgroud)

drawHealth3

4)此版本绘制离散条.

void drawHealth4(float health) {
  const int numDiv = 15;
  const float sep = 0.04;
  const float barHeight = 1.0/(float)numDiv;
  glBegin(GL_QUADS);
    glColor3f(1, 0, 0);
    for(float i = 0; i < health; i += (sep + barHeight)) {
      glVertex2f(0, i);
      glVertex2f(1, i);
      glVertex2f(1, i + barHeight);
      glVertex2f(0, i + barHeight);
    }
  glEnd();
}
Run Code Online (Sandbox Code Playgroud)

drawHealth4