如何在OpenGL中绘制锯齿状像素线

时间:2016-11-24 11:32:44

标签: opengl pixels antialiasing

我能够使用OpenGL绘制一条线,产生以下结果:

smooth line

然而,与我的游戏的像素化风格相比,这条线看起来平滑且不合适。我希望看起来更像这样的结果:

rough line

有人可以给我一些提示,告诉我如何让OpenGL绘制这样的像素化线?

这是我的renderLine()方法(使用立即模式,我很害怕):

public static void renderLine(float x1, float y1, float x2, float y2,
        float thickness, float[] colour) {

    // Store model matrix to prevent contamination
    glPushMatrix();

    // Set colour and thickness
    glColor4f(colour[0], colour[1], colour[2], colour[3]);
    glLineWidth(thickness);

    // Draw line
    glBegin(GL_LINES);
    {
        glVertex2f(x1, y1);
        glVertex2f(x2, y2);
    }
    glEnd();

    // Restore previous state
    glColor4f(1, 1, 1, 1);
    glLineWidth(1.0f);
    glPopMatrix();
}

1 个答案:

答案 0 :(得分:3)

OpenGL中没有内置任何内容来绘制这些行。

您可以绘制一个包含线条中像素的紧凑四边形,并使用一个片段着色器来评估要保留哪些像素以及哪些像素被遗漏。

但是,考虑到您希望所有游戏的外观都是像素化的,最好的解决方案是渲染到较小的纹理,然后使用x4(或任何因子)最近邻插值将其blit到屏幕。然后绘制这样的线只会减少到只有GL_LINE的常规GL_LINE_SMOOTH