我目前在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_shift
和y_shift
的。
如果这是张贴位置错误的地方,请告知我,我会更改它。
答案 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)