0

我正在用我制作的函数绘制 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));

这就是结果(不管我设置的宽度有多低!):

在此处输入图像描述

我不明白为什么会发生这种情况,我试图从 directX 切换,等效代码给出了我需要的结果:

在此处输入图像描述

我怎样才能解决这个问题?这发生在我所有的线/多边形代码上!:(

4

1 回答 1

3

很可能您是在支持全屏抗锯齿的帧缓冲区(多重采样)上进行渲染,而不是精确到像素中心。因此,您的线条实际上涵盖了两行/两列像素,从而产生了这种效果。尝试强制禁用抗锯齿(使用 GPU 驱动程序控制面板)会发生什么。

于 2013-09-21T19:15:11.670 回答