首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多重旋转问题

多重旋转问题
EN

Stack Overflow用户
提问于 2017-05-08 10:59:17
回答 1查看 239关注 0票数 0

这就是我的问题。我必须在双三次曲面上沿圆形轨迹移动一个圆环。

然而,环面的垂直轴必须与给定点处的曲面法线对齐,而且环面必须面对它的圆轨迹。

为了做到这一点,我取了法向量和Oy向量,做了一个十字和一个点积来找到我需要的角度和旋转的轴,它起作用了。为了管理第二部分,我取了圆环的实际坐标,在圆形轨迹上的下一个坐标,做了一个向量,并做了与前面描述相同的操作来找到角度和轴,它起作用了。

我的问题是,我必须同时应用两个旋转,但我找不到这样做的方法。我试着用各种可能的方法来推送/弹出矩阵,但是我找不到一条出路。所以我又回到这个问题上来了。

代码语言:javascript
运行
复制
    glPushMatrix();
    glTranslatef(pp -> x, pp ->y , pp ->z);

    glRotatef(*angledegree, vecortho -> x, vecortho -> y, vecortho -> z);
    glRotatef(*angledegreetang, tang -> x, tang -> y, tang -> z);

    tore(0.1, 0.3, 6, 4, 1);
    repere(0.6);
    glPopMatrix();

有什么想法吗?很抱歉打扰你,我想这一定很简单,但我看不出来。无论顺序如何,第一次轮换总是会引起下一次轮换。vecortho是根据曲面法线和Oy计算的轴向量。tang是用我的轨迹向量和Ox计算得到的向量。

EN

回答 1

Stack Overflow用户

发布于 2017-05-08 12:56:55

不要考虑旋转的问题。只要从轴的角度来考虑。

您希望将圆环的新Y轴转换为特定的新方向(法线向量),将其新的Z轴转换为特定的新方向(正向向量),并将其X轴转换为您不关心的X轴。

因此,构建执行此转换的矩阵并使用它。你的向量类可能与这个例子不同,我的向量数学可能会生疏,因为我还没有测试过这段代码:

代码语言:javascript
运行
复制
vector newY = normalVec;
vector newZ = forwardVec;
// We don't really care what X is, but it must be perpendicular to Y and Z. Swap Y and Z here if this ends up mirroring the object.
vector newX = normalize(cross(newY, newZ));

double matrix[16] = {
    newX.x,  newX.y,  newX.z,  0,
    newY.x,  newY.y,  newY.z,  0,
    newZ.x,  newZ.y,  newZ.z,  0,
    0,       0,       0,       1,
};
glPushMatrix();
glTranslatef(position of torus);
glMultMatrixd(matrix);
// draw torus
glPopMatrix();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43839114

复制
相关文章

相似问题

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