如何在 DirectX 上沿 XYZ 轴旋转对象?

发布于 2024-12-25 14:16:23 字数 843 浏览 1 评论 0原文

我尝试了这段代码:

D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

但它似乎总是只旋转最后一次旋转(Z 轴)。

如何同时使用所有 XYZ 轴旋转对象? 我试图找到 OpenGL 旋转的 DirectX 等效项:

glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);


编辑: 看来我自己想出来了:

D3DXMATRIX matRotateX;
D3DXMATRIX matRotateY;
D3DXMATRIX matRotateZ;
D3DXMatrixRotationX(&matRotateX, rx);
D3DXMatrixRotationY(&matRotateY, ry);
D3DXMatrixRotationZ(&matRotateZ, rz);
D3DXMATRIX matRotate = matRotateX*matRotateY*matRotateZ;
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

如果没有,请评论。 8 小时过去了,我才能将其作为答案发布! (需要+7声望才能做到)。

I tried this code:

D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

But it seems to always only rotate the last rotation (Z axis).

How do i rotate an object with all the XYZ axes at the same time?
Im trying to find DirectX equivalent for OpenGL rotation:

glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);


EDIT:
Looks like i figured it out by myself:

D3DXMATRIX matRotateX;
D3DXMATRIX matRotateY;
D3DXMATRIX matRotateZ;
D3DXMatrixRotationX(&matRotateX, rx);
D3DXMatrixRotationY(&matRotateY, ry);
D3DXMatrixRotationZ(&matRotateZ, rz);
D3DXMATRIX matRotate = matRotateX*matRotateY*matRotateZ;
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

IF not, please comment. I cant post it as an answer until 8 hours has passed! (need +7 reputation to do it).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伤痕我心 2025-01-01 14:16:23

D3DXMatrixRotationX 不会旋转矩阵,但会创建一个可用于旋转某些内容的矩阵。

所以你可以在每一步之后使用矩阵并旋转其他东西,或者你可以使用 D3DXMatrixRotationYawPitchRoll 这样你只需要创建一次......

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);

编辑:
您的编辑也有效...

D3DXMatrixRotationX doesn't rotate a matrix but creates a matrix that can be used to rotate something.

So it you could use the matrix right afterwards each step and rotate something else or you could use D3DXMatrixRotationYawPitchRoll so that you only need to create one once...

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);

EDIT:
Your edit works too...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文