我使用我制作的函数绘制了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切换,而等效的代码会提供我需要的结果:
我该如何解决这个问题?我的所有线/多边形代码都会发生这种情况! :(
答案 0 :(得分:3)
很可能你是在全屏抗锯齿功能的帧缓冲(多重采样)上渲染而不是击中确切的像素中心。所以你的线实际上覆盖了两行/每列像素,从而产生了这种效果。尝试强制禁用抗锯齿(使用GPU驱动程序控制面板)时会发生什么。