在改变线条粗细的同时在OpenGL中绘制2D形状的轮廓

时间:2013-05-10 03:15:49

标签: opengl shapes

所以我正在尝试(我认为很简单)使用OpenGL绘制一些2D形状的轮廓。这一切似乎都有效,直到我尝试使用glLineWidth(w);更改轮廓的线条粗细。我的第一个问题是w = 10或w = 3000(或任何更大的数字)显示相同的线条粗细,但更小的像w = 3产生更细的线。

我认为这与它有关。我的Max似乎是7可以增加那个什么的吗?我只是想画一条粗线!!

float lineWidth[2];
glGetFloatv(GL_LINE_WIDTH_RANGE, lineWidth);
std::cout<<"min: "<< lineWidth[0]<<" max: "<<lineWidth[1]<<"------\n";

我的第二个问题是,我的线相遇的点似乎没有对齐或者什么东西,这使得它看起来像我的所有形状(矩形,圆形,三角形)中都缺少litte位。这是Draw percentage of circle outline提到的行为,但我似乎无法从帖子中说出来解决这个问题。

这是我用来绘制矩形的代码:

glLineWidth(20);
glBegin(GL_LINE_LOOP);
glVertex2f(x1, y1);//1
glVertex2f(a1, a2);//2
glVertex2f(x2, y2);//3
glVertex2f(b1, b2);//4
glEnd();

从上面提到的帖子中,这是我用于圆圈的代码:

glEnable(GL_LINE_SMOOTH);
glLineWidth(10); 
glBegin(GL_LINE_STRIP); 
for (int i=0; i < (360/10*100/10); i++) { 
     float degInRad = i*DEG2RAD; 
     glVertex2f(x1+cos(degInRad)*r,y1+sin(degInRad)*r); } 
glEnd();

“缺失的位”看起来像这样:

enter image description here

我也看了一下这篇文章How to render perfect wireframed rectangle in 2D mode with OpenGL?,但是从那里得到的引导并没有真正的帮助。

1 个答案:

答案 0 :(得分:1)

  

我的第一个问题是w = 10或w = 3000(或任何更大的数字)显示相同的线条粗细,但是像w = 3的更小的线条会产生更细的线条。

通过glGet()GL_LINE_WIDTH_RANGE检查您的OpenGL实施实际支持的内容。如果它在10.0达到顶峰,我不会感到惊讶。

  

我只是想画一条思考线!!

对于较大的线宽,您必须使用三角形/四边形do that yourself

  

“缺失的位”看起来像这样:

OpenGL没有指定宽度为GL_LINES的{​​{1}}应该如何加入/结束。 It's up to the implementation