如何使用矩形绘制粗线?

时间:2020-06-15 23:58:00

标签: c++ opengl

您好,我正在尝试实现以下目标: enter image description here

我目前在OpenGL中实现此目标的代码如下:

void draw_thick_line(vec2 start, vec2 end, GLfloat thickness) {
    GLfloat slope_angle = atanf((end.y-start.y)/(end.x-start.x));
    GLfloat b = (M_PI/2) - slope_angle;
    GLfloat y_shift = thickness*sinf(b)/2.0f;
    GLfloat x_shift = thickness*cosf(b)/2.0f;
    glBegin(GL_QUADS);
    glVertex2f(start.x - x_shift, start.y - y_shift);
    glVertex2f(start.x + x_shift, start.y + y_shift);
    glVertex2f(end.x + x_shift, end.y + y_shift);
    glVertex2f(end.x - x_shift, end.y - y_shift);
    glEnd();
}

但是以下内容并没有达到我一直想要的。我做错了什么吗?我的猜测是关于x_shifty_shift的。 enter image description here

如果这是张贴位置错误的地方,请告知我,我会更改它。

1 个答案:

答案 0 :(得分:2)

您的角度计算不太正确:

date Mon Jun 06 04:56:40.184122 PM 2020
base hex  timestamps absolute
internal events logged
Begin Triggerblock Wed Dec 12 10:17:48.038 PM 1969
0.000000 Start of measurement
0.000000 1  300             Rx   d 6 00 00 14 CF BE FF

这给您GLfloat b = (M_PI/2) - slope_angle; 的补语(在相同的定量子中),但相对于坐标系而言不是正确的角度,并且不会将您变换为所需的线段。 / p>

我认为正确的角度计算应为:

slope_angle

您的“宽”线段的角度比原始线段的角度大PI / 2度。

您也可以通过交换注释中提到的GLfloat b = (M_PI/2) + slope_angle; 的符号来实现此目的,因为您拥有:

x_shift

您也可以避免使用类似三角形的三角函数,例如:

sin(pi/2 + b) = sin(pi/2 - b)
cos(pi/2 + b) = -cos(pi/2 - b)