2013-09-21 3 views
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(); 
} 

Это его работу хорошо, но я могу» t получить хорошие линии размером 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

Как это исправить? Это происходит со всем кодом моей линии/полиформы! :(

ответ

3

Скорее всего, вы оказываетесь на полноэкранном фейерверке с поддержкой сглаживания (мультисэмплинг) и не попадаете в точные пиксельные центры. Таким образом, ваша линия фактически покрывает два ряда/столбцов пикселей, дающих этот эффект. Попробуйте, что произойдет, если вы принудительно отключить сглаживание (с помощью панели управления драйвером GPU)

+0

ofAntiAliasingDisable(); сделал трюк, спасибо :) – Gizmo

+0

@Gizmo: Это действительно не решает проблему, а именно, что ваши координаты линий «То, что нужно лежать точно в пиксельных центрах. – datenwolf

Смежные вопросы