2014-06-13 143 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();