在OpenGL中绘制未填充的矩形形状

7

我想在 OpenGL 中绘制未填充的矩形,但是当我使用 glBegin(GL_QUADS) 或者 glBegin(GL_POLYGON) 时,结果会被填充,而我希望它不被填充。请问如何绘制未填充矩形。

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();   
}

我猜只需要画线吧?使用“GL_LINES”。 - DanSkeel
@DanSkeel:看一下这个:https://wiki.delphigl.com/index.php/glBegin - Luatic
如果你只是画线,那么点之间就不会全部连接。他只会有4条线中的2条。 - Luatic
3个回答

9

使用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 - Andon M. Coleman

3
这个对我有效...
glBegin(GL_LINE_LOOP);
    glVertex2f(x1,y1);
    glVertex2f(x2,y1);
    glVertex2f(x2,y2);
    glVertex2f(x1,y2);
glEnd();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接