0

重複の可能性:
オープンGL:-四辺形の塗りつぶし部分

Gl開発を始めて、プレイヤーのエネルギーレベルを表示したいゲームを開発するのは初めてです。四辺形の一部を塗りつぶしたいのですが。

Plzは、一部が塗りつぶされているq四辺形を作成するのに役立ちますか?

4

3 に答える 3

13

OpenGLでいくつかの簡単なヘルスバーを作成しました。最初のものはあなたが求めたものであり、他のものは楽しみのためでした:)

説明のために、すべてのコードは古いOpenGLにあります。関数は、ヘルスを0から1までの数値として受け取り、Y軸を中心としてy=0で高さ1.0の正方形を描画します。スクリーンショットは、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();

これは、必要な色のクワッドを描画する例です。jsutは、glVertex2dのパラメーターをクワッドの端点に置き換えます。エネルギーレベルバーを作成するには、背景のクワッドを1つ描画し、その中にクワッドを描画して、塗りつぶされた部分を表します。座標を使用して、内側のクワッドのサイズを制御します。

于 2012-09-29T18:08:04.493 に答える
0

動的長さの1つではなく、2つの四角形を作成できます。

  1. 最初に、長さxとlxの2つの四辺形(たとえばAとB)を初期化します。
  2. id強度が増加すると、Aの長さを増やし、Bの長さを同じ量だけ減らす必要があります。

アイデアを得るにはこれで十分だと思います。

于 2012-09-29T18:05:23.510 に答える