线顶点太厚(无论宽度是多少)

时间:2013-09-21 15:17:44

标签: c++ windows opengl drawing openframeworks

我使用我制作的函数绘制了3行(简化,工作示例):

template<class... Args> inline void DrawPoly(float width , int color, Args... args)
{
    glLineWidth(width); 
    ofSetHexColor(color);
    glBegin(GL_LINES);
    std::array<ofPoint, sizeof...(args)> list = {args...};
    for(size_t i = 1, j = list.size(); i < j; ++i)
    {
        glVertex3f(list[i-1].x, list[i-1].y, list[i-1].z);
        glVertex3f(list[i].x, list[i].y, list[i].z);
    }
    glEnd();
}

它很好地完成了它的工作,但我无法获得良好的1像素大小的线条。无论我设置宽度如何。

这就是我调用函数的方式:

DrawPoly(0.001,0x77777777,ofPoint(150,150),ofPoint(200,150),ofPoint(200,200),ofPoint(150,200));

这就是结果(无论我设置宽度多低!):

enter image description here

我不明白为什么会发生这种情况,我正在尝试从directX切换,而等效的代码会提供我需要的结果:

enter image description here

我该如何解决这个问题?我的所有线/多边形代码都会发生这种情况! :(

1 个答案:

答案 0 :(得分:3)

很可能你是在全屏抗锯齿功能的帧缓冲(多重采样)上渲染而不是击中确切的像素中心。所以你的线实际上覆盖了两行/每列像素,从而产生了这种效果。尝试强制禁用抗锯齿(使用GPU驱动程序控制面板)时会发生什么。