2015-07-05 36 views
-1

我一直在爲一個遊戲(學校項目)的GUI菜單工作,我們有一個引擎模板準備就緒,我們只需要製作一個GUI菜單。我和我的朋友和老師的幫助已經設法使這裏充滿箱非的功能是:OpenGL,C++角色框

void BoxTest(float x, float y, float width, float height, float Width, Color color) 
{ 
glLineWidth(3); 
glBegin(GL_LINE_LOOP); 
glColor4f(0, 0, 0, 1); 
glVertex2f(x, y); 
glVertex2f(x, y + height); 
glVertex2f(x + width, y + height); 
glVertex2f(x + width, y); 
glEnd(); 
glLineWidth(1); 
glBegin(GL_LINE_LOOP); 
glColor4f(color.r, color.g, color.b, color.a); 
glVertex2f(x, y); 
glVertex2f(x, y + height); 
glVertex2f(x + width, y + height); 
glVertex2f(x + width, y); 
glEnd(); 
} 

這是怎麼看起來像現在: http://gyazo.com/c9859e9a8e044e1981b3fe678f4fc9ab

問題是我希望它看起來像這個: http://gyazo.com/0499dd8324d24d63a54225bd3f28463d

打擾它看起來好多了,但我和我的朋友一直坐在這裏幾天沒有線索如何實現這一點。

+0

謝謝,意外鏈接錯誤的圖片修復了! – StreY

回答

2

對於OpenGL線性原語,您必須將其分解爲多行。 GL_LINE_LOOP製作一系列相互連接並在最後關閉的線條。不是你想要的。相反,你應該使用簡單的GL_LINES。每兩個glVertex調用(順便說一句:你不應該使用這些,因爲glVertex已經過時了;近20年來已經過時了)製作一行。

讓我們看看這個ASCII藝術:

0 --- 1 4 --- 3 
|    | 
2    5 

8    b 
|    | 
6 --- 7 a --- 9 

你會畫線段

  • 0 - 1
  • 0 - 2
  • 3 - 4
  • 3 - 5
  • 6 - 7
  • 6 - 8
  • 9 - 一個
  • 9 - B

與各點的座標替換符號0 ... B和可以讓這個

glBegin(GL_LINES); 

glVertex(coords[0]); 
glVertex(coords[1]); 
glVertex(coords[0]); 
glVertex(coords[2]); 

glVertex(coords[3]); 
glVertex(coords[4]); 
glVertex(coords[3]); 
glVertex(coords[5]); 

glVertex(coords[6]); 
glVertex(coords[7]); 
glVertex(coords[6]); 
glVertex(coords[8]); 

glVertex(coords[9]); 
glVertex(coords[0xa]); 
glVertex(coords[9]); 
glVertex(coords[0xb]); 

glEnd(); 

作爲最後一個觸摸你可以將coords數組加載到OpenGL頂點數組中,而是使用glDrawArrays或glDrawElements。