我有一组点,这是一条线的形状。

我们如何创建新的点集,这将是在一个偏移的距离,目前的一组点,并使用GL_TRIANGLE_STRIP,我们将能够创建一个多边形形状。

这是我当前的代码,但我无法从中得到任何有意义的结果。
// outlineVertices are existing set of points from which we would generate the offsetPoints
for (int i = 0; i < outlineVertices.size() - 3 ; i += 3) {
finalVertices.push_back(outlineVertices[i]);
finalVertices.push_back(outlineVertices[i + 1]);
finalVertices.push_back(outlineVertices[i + 2]);
glm::vec3 point1 = glm::vec3(outlineVertices[i], outlineVertices[i + 1], outlineVertices[i + 2]);
glm::vec3 point2 = glm::vec3(outlineVertices[i + 7], outlineVertices[i + 1 + 7], outlineVertices[i + 2 + 7]);
glm::vec4 directionVector = GetPerpendicularVectorDirection(point1, point2);
finalVertices.push_back(outlineVertices[i] - (directionVector.x * outlineWidth ));
finalVertices.push_back(outlineVertices[i + 1] + (directionVector.y * outlineWidth));
finalVertices.push_back(outlineVertices[i + 2]);
finalVertices.push_back(outlineVertices[i + 3]);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
glm::vec4 RectangleOutline::GetPerpendicularVectorDirection(glm::vec3 point1, glm::vec3 point2) {
glm::vec3 Direction = glm::normalize(point1 - point2);
float x, y;
x = Direction.x;
Direction.x = -y;
Direction.y = x;
return glm::vec4(Direction, 0);
}发布于 2021-08-29 13:11:50
你必须计算两个线段之间的人字关节。为此,您需要计算要连接的线段上的向量。计算到线段的归一化法向量。沿人字形关节的矢量是法向量之和。(您甚至可以在顶点着色器:OpenGL线宽中完成此操作)
如果你有3分(p1,p2,p3)
p1 p2
+-----+
\
\
+
p3然后,在p2中,沿人头肌关节的法线矢量是:
// vectors along the line
glm::vec2 v12 = p2 - p1;
glm::vec2 v23 = p3 - p2;
// normalized normal vectors to the line segments
glm::vec2 vn12 = glm::normlalize(glm::vec2(-v12.y, v12.x));
glm::vec2 vn23 = glm::normlalize(glm::vec2(-v23.y, v23.x));
// normalized vector along miter joint
glm::vec2 vm2 = glm::normalize(vn12 + vn23);接头上的点(pa,pb)是:
pa
-----+
p2 / \
-----+ \
/ \
-----+ \
pb \
\float d = thickness / glm::dot(vm2, vn12);
glm::vec2 pa = p2 + vm2 * d/2;
glm::vec2 pb = p2 - vm2 * d/2;https://stackoverflow.com/questions/68973103
复制相似问题