gpt4 book ai didi

C++ OpenGL 线在其轴上旋转

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:02 28 4
gpt4 key购买 nike

尝试使用 glRotatef 像钻头一样在自己的轴上转动线条,但无法弄清楚。

|   (p2).__________.(p3)
| / ^-line2
| /
| /<--line1
| /
| /
| .(p1)
|_______________

无论第 1 条线处于什么角度,我都希望第 2 条线围绕第 1 条线旋转。

使用 OpenGL 的 glRotatef(),让 p2 和 p3 围绕 p1 旋转。

我用于 ines 的变量。

 struct Line{
float x,y,z, angle,length;
int parent;
};
vector<Line>line;
//Read file set everthing for lines...

最佳答案

首先,您需要平移第 2 行,使 (p2) 在旋转之前位于原点,因为您在这里真正想要做的是围绕 (p2) 旋转第 2 行。

然后,您需要定义旋转轴,这基本上是 (p2-p1) 并将在 glRotatef (...) 中形成 x、y、z 参数。

之后,您围绕所述轴旋转一定角度,最后将线平移回其原始位置。

您的解决方案可能看起来像这样:

//
// Draw Line 1
//

float rX, rY, rZ;

rX = p2.x - p1.x;
rY = p2.y - p1.y;
rZ = p2.z - p1.z;

glPushMatrix ();

glTranslatef ( p2.x, p2.y, p2.z);
glRotatef (angle, rX, rY, rZ );
glTranslatef ( -p2.x, -p2.y, -p2.z);

//
// Draw Line 2
//

glPopMatrix ();

在您产生错误的想法并告诉我我这样做是相反的之前,请记住 OpenGL 使用列主矩阵和后乘法。这意味着有效的顺序转换应用于实际从下到上的读取。矩阵运算仍然按照写入的顺序进行,由于 GL 实现矩阵乘法的方式,数学运算有点反直觉。

此外,计算旋转轴时 p2 和 p1 的顺序很重要,因为如果将它们颠倒,就会颠倒顺时针/逆时针方向。因此,如果您的钻头旋转方向错误,您应该很清楚为什么 ;)

关于C++ OpenGL 线在其轴上旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com