gpt4 book ai didi

c++ - opengl中旋转后的坐标值

转载 作者:行者123 更新时间:2023-11-28 02:47:44 26 4
gpt4 key购买 nike

假设我有一个立方体。假设坐标值是这样的。 (1 个单位一个 ARM )

GLfloat vertA[3] = { 0.5, 0.5, 0.5};
GLfloat vertB[3] = {-0.5, 0.5, 0.5};
GLfloat vertC[3] = {-0.5,-0.5, 0.5};
GLfloat vertD[3] = { 0.5,-0.5, 0.5};
GLfloat vertE[3] = { 0.5, 0.5,-0.5};
GLfloat vertF[3] = {-0.5, 0.5,-0.5};
GLfloat vertG[3] = {-0.5,-0.5,-0.5};
GLfloat vertH[3] = { 0.5,-0.5,-0.5};

如果我这样翻译

glTranslatef(1,2,3);

然后 1,2 和 3 将分别添加到 x,y 和 z 坐标。这些是转换立方体的新坐标值。但是如果我旋转它一定程度(有或没有翻译)

glRotatef(25,0,0,1);

现在旋转的立方体的坐标是多少?我在 opengl 中工作。我在 Windows 上使用 C++。

最佳答案

您应该熟悉线性代数和变换矩阵。

glRotate 会做的是生成一个 rotation matrix并将其后乘到当前矩阵。您应该注意这里的一些事情:glTranslate 不会直接向顶点坐标添加任何内容,glRotate 也不会更改坐标。所有这些所做的就是改变一个矩阵。此矩阵将累积所有变换的组合,并将在绘制调用期间将一次应用于所有顶点。

在您的情况下,需要绕 z 轴旋转 25 度,因此不会更改 z 坐标。旋转矩阵看起来像这样

|  cos(25°)   -sin(25°)    0        0   |
| sin(25°) cos(25°) 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |

要将此矩阵应用于 vector (x,y,z,w)^T,我们只需将矩阵乘以 vector 即可。按照乘法规则,我们得到一个新的 vector

x' = cos(25°)*x -sin(25°)*yy' = sin(25°)*x +cos(25°)*yz' = zw' = w

这里只是单独旋转,不考虑平移。但是您可以将 zour vertex 的值放入 int 中,并将返回转换后的结果。

关于c++ - opengl中旋转后的坐标值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856034/

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