首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建大纲

如何创建大纲
EN

Stack Overflow用户
提问于 2021-08-29 12:54:21
回答 1查看 202关注 0票数 2

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

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

这是我当前的代码,但我无法从中得到任何有意义的结果。

代码语言:javascript
复制
// 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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-29 13:11:50

你必须计算两个线段之间的人字关节。为此,您需要计算要连接的线段上的向量。计算到线段的归一化法向量。沿人字形关节的矢量是法向量之和。(您甚至可以在顶点着色器:OpenGL线宽中完成此操作)

如果你有3分(p1,p2,p3)

代码语言:javascript
复制
p1       p2
  +-----+
         \
          \
           +
             p3

然后,在p2中,沿人头肌关节的法线矢量是:

代码语言:javascript
复制
// 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)是:

代码语言:javascript
复制
          pa
    -----+
     p2 / \
  -----+    \
      / \
-----+    \
  pb  \
        \
代码语言:javascript
复制
float d = thickness / glm::dot(vm2, vn12);

glm::vec2 pa = p2 + vm2 * d/2;
glm::vec2 pb = p2 - vm2 * d/2;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68973103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档