2014-06-13 120 views
4

我想繪製OpenGL中未填充的矩形形狀,但是當我使用glBegin(GL_QUADS)glBegin(GL_POLYGON)時,所得到的形狀已填充,但我想填充。我如何繪製未填充的矩形。在OpenGL中繪製未填充的矩形形狀

void draweRect(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0.0,0.0,1.0); 
    glLineWidth(30); 
    glBegin(GL_POLYGON); 
     glVertex2i(50,90); 
     glVertex2i(100,90); 
     glVertex2i(100,150); 
     glVertex2i(50,150); 
    glEnd(); 
    glFlush(); 
} 
+0

我猜只是畫線?使用'GL_LINES'。 – DanSkeel

+0

@DanSkeel:看看這個:https://wiki.delphigl.com/index.php/glBegin – user7185318

+0

如果你只是畫線,點不會全部連接。他只有4條線中的2條。 – user7185318

回答

7

使用GL_LINE_LOOP(而不是GL_POLYGON)來繪製一個連接的串聯的線段上的多邊形的周長,而不是填充多邊形。

或者,您可以使用glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) ...記得將其設置回默認的glPolygonMode (GL_FRONT_AND_BACK, GL_FILL)以恢復通常的(填充)渲染。

4

您需要爲您的渲染設置填充模式。

您可以使用glPolygonMode(...);方法。

嘗試以下操作:

void draweRect(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0.0,0.0,1.0); 
    glLineWidth(30); 

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 

    glBegin(GL_POLYGON); 
     glVertex2i(50,90); 
     glVertex2i(100,90); 
     glVertex2i(100,150); 
     glVertex2i(50,150); 
    glEnd(); 

    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 

    glFlush(); 
} 
+1

這並不是說這裏所用的所有被廢棄的東西都是重要的,但我會避免使用'GL_FRONT'作爲一般規則。 GL 3.1需要'GL_FRONT_AND_BACK',它不再允許每邊多邊形模式。如果你想知道,這就是它說只有'GL_FRONT_AND_BACK'在鏈接參考頁面中有效的原因 - 該頁面用於GL4; GL2版本可以在這裏找到(http://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml) –

+0

@ AndonM.Coleman注意到,謝謝 – rhughes

0

對我來說這一次的工作..

glBegin(GL_LINE_LOOP); 
    glVertex2f(x1,y1); 
    glVertex2f(x2,y1); 
    glVertex2f(x2,y2); 
    glVertex2f(x1,y2); 
glEnd();