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

时间:2012-09-29 18:01:16

标签: opengl

  

可能重复:
  Open GL :- Filling portion of quadrilateral

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

Plz帮助我创建q部分四边形的部分填充?

3 个答案:

答案 0 :(得分: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();
}

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

答案 1 :(得分: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();

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

答案 2 :(得分:0)

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

  1. 首先初始化长度为x和l-x的两个四边形(比如说A和B)。
  2. id强度增加,你只需要增加A的长度并减少B的长度相同的数量。
  3. 我认为这足以说明这个想法。