在OpenGL中绘制带有粗边的彩色三角形

时间:2018-12-22 21:54:17

标签: opengl

enter image description here

在opengl中是否可以将这种类型绘制为三角形?

我已经尝试过

  • glBegin(GL_TRIANGLES);

  • glBegin(GL_LINE_LOOP);

我使用glBegin(GL_LINE_LOOP)

获得的代码和结果

代码:

glBegin(GL_LINE_LOOP);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex2f(-30.0, 30.0);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex2f(30.0, 30.0);
glColor3f(0.5f, 0.0f, 1.0f);
glVertex2f(0.0, -30);
glEnd();

结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

我会将您的代码更改为此:

glLineWidth(5.0); // this makes 5 pixel thick lines
glBegin(GL_LINES);
glColor3f(0.0f, 1.0f, 1.0f); glVertex2f(-30.0, 30.0); glVertex2f( 30.0, 30.0);
glColor3f(1.0f, 1.0f, 0.0f); glVertex2f( 30.0, 30.0); glVertex2f(  0.0,-30.0);
glColor3f(0.5f, 0.0f, 1.0f); glVertex2f(  0.0,-30.0); glVertex2f(-30.0, 30.0); 
glEnd();
glLineWidth(1.0); // return state to original conditions

因此您应该具有粗线,并且颜色不应在线之间插值...

答案 1 :(得分:1)

要删除颜色渐变,您至少有两个选择:

  • 您可以在渲染三角形之前调用glShadeModel(GL_FLAT);

  • 您可以使用GL_LINES,如下所示:

    glBegin(GL_LINES);
    glColor3f(0.0f, 1.0f, 1.0f);
    glVertex2f(-30.0, 30.0);
    glVertex2f(30.0, 30.0);
    glColor3f(1.0f, 1.0f, 0.0f);
    glVertex2f(30.0, 30.0);
    glVertex2f(0.0, -30);
    glColor3f(0.5f, 0.0f, 1.0f);
    glVertex2f(0.0, -30);
    glVertex2f(-30.0, 30.0);
    glEnd();
    

要增加线宽,可以使用glLineWidth

但是您会看到,宽线的末端通常看起来不像图像上那么漂亮和圆润。如果这对您来说是个问题,则必须使用大量精心放置的GL_TRIANGLES来绘制形状。