0

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

我是开放 GL 开发和开发游戏的新手,我想在其中展示玩家的能量水平。我想为此填充四边形的一部分。

请帮我创建一个部分被填充的 q 四边形?

4

3 回答 3

13

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

为了说明起见,所有代码都在旧的 OpenGL 中。这些函数将健康作为一个介于 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();
}

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();
}

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();
}

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();
}

drawHealth4

于 2012-09-29T18:48:18.660 回答
2
glColor4f(r,g,b,a);
glBegin(GL_QUADS);
glVertex2d(-R,-1.0);
glVertex2d(R,-1.0);
glVertex2d(R,1.0);
glVertex2d(-R,1.0);
glEnd();

这是一个绘制所需颜色的四边形的示例,只需将 glVertex2d 的参数替换为四边形的端点。要制作能级条,只需绘制一个背景四边形,然后在其中绘制一个四边形来表示填充部分。使用坐标来控制内部四边形的大小。

于 2012-09-29T18:08:04.493 回答
0

您可以创建两个四边形而不是动态长度之一。

  1. 首先初始化两个长度为 x 和 lx 的四边形(比如 A 和 B)。
  2. id 强度增加,您只需增加 A 的长度并减少 B 的长度相同的量。

我认为这足以理解这个想法。

于 2012-09-29T18:05:23.510 回答