2012-09-29 57 views

回答

10

我在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

+0

感謝您的描述建議。我喜歡離散酒吧的概念。我實施了一些修改:)。 – ni30rocks

0

您可以創建兩個四邊形而不是一個動態長度。

  1. 首先初始化長度爲x和l-x的兩個四邊形(如A和B)。
  2. id強度增加,您只需增加A的長度並減少B的長度。

我認爲這足以得到這個想法。

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的參數。要使能級欄簡單地繪製一個背景四邊形,然後在其中繪製一個四邊形來表示填充的部分。使用座標來控制內部四邊形的大小。