【问题标题】:LWJGL/OpenGL drawn lines not completely meeting in cornersLWJGL/OpenGL 绘制的线在拐角处不完全相遇
【发布时间】:2016-01-12 15:43:37
【问题描述】:

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

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

【问题讨论】:

  • 尝试启用抗锯齿,看看是否有帮助 (glEnable(GL_LINE_SMOOTH))
  • 不幸的是它没有。
  • 尝试使用GL_LINE_LOOP 而不是GL_LINES 绘图。这样您也不必重复每个顶点。
  • 这确实修复了双顶点,但角仍然相同。

标签: java opengl graphics geometry lwjgl


【解决方案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();
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多