LWJGL / OpenGL绘制的线条并不完全在角落里相遇

时间:2016-01-12 15:43:38

标签: java opengl graphics geometry lwjgl

我创建了一个在绘制纹理周围绘制黑色边框的方法。然而,边界线确实在角落处产生很小的间隙。我认为这与边框的宽度有关,并试图将边界宽度添加到线条的长度,但是这会使它们与一些边界宽度值一起缩短,并与其他边界宽度值一起变大。

The black lines are the borders

public static void DrawBorder(float x, float y, float width, float height) {
    float borderWidth = 10.0f;
    glColor3f(0, 0, 0);
    glLineWidth(borderWidth);
    glTranslatef(x, y, 0);

    glBegin(GL_LINE_LOOP);
    glVertex2f(0, 0);
    glVertex2f(width, 0);
    glVertex2f(width, height);
    glVertex2f(0, height);
    glEnd();
    glColor3f(255, 255, 255);
}

1 个答案:

答案 0 :(得分:1)

OpenGL不会在线上绘制端盖,也不会将线连接在一起。有两种方法可以解决这个问题:

  1. 通过borderWidth/2让每一行更长一点。这意味着您的线条不能共享顶点。

  2. (推荐)改用三角形。像这样:

    float border = 10.0f;
    glColor3f(0, 0, 0);
    glTranslatef(x, y, 0);
    glBegin(GL_TRIANGLE_STRIP);
    glVertex2f(    0,      0); glVertex2f(      - border,        - border);
    glVertex2f(width,      0); glVertex2f(width + border,        - border);
    glVertex2f(width, height); glVertex2f(width + border, height + border);
    glVertex2f(    0, height); glVertex2f(      - border, height + border);
    glVertex2f(    0,      0); glVertex2f(      - border,        - border);
    glEnd();