gpt4 book ai didi

c++ - 我的矩阵乘法不符合我的预期

转载 作者:太空宇宙 更新时间:2023-11-04 13:58:47 25 4
gpt4 key购买 nike

这就是我想要的:

enter image description here

下面的代码我做错了什么。轨道旋转的平移输出永远不会发生,它最终只是在原始轴上旋转。

void Renderer::UpdateAsteroid( Placement^ asteroidRotation, Placement^ sceneOrientation )
{
XMMATRIX selfRotation;

// Rotate the asteroid
selfRotation = XMMatrixRotationX( asteroidRotation->GetRotX() );
selfRotation = XMMatrixMultiply( selfRotation, XMMatrixRotationY( asteroidRotation->GetRotY() ) );
selfRotation = XMMatrixMultiply( selfRotation, XMMatrixRotationZ( asteroidRotation->GetRotZ() ) );

XMMATRIX translation;

// Move the asteroid to new location
translation = XMMatrixTranslation( sceneOrientation->GetPosX(), sceneOrientation->GetPosY(), sceneOrientation->GetPosZ() );

XMMATRIX orbitRotation;

// Rotate from moved origin
orbitRotation = XMMatrixRotationZ( sceneOrientation->GetRotZ() );

XMMATRIX outputMatrix = selfRotation * translation * orbitRotation;

// Store
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose( outputMatrix ) );
}

但它似乎不起作用..它只是在同一点上旋转。

最佳答案

Matrix multiplication不可交换的,即改变操作数顺序会改变结果。通常,您需要计算所有矩阵,然后相乘。先试试这个顺序:

result = scale * selfRotation * translation * orbitRotation

如果这不是您想要的,只需四处移动矩阵以找到正确的顺序。

注意,XMMath 也有 XMMatrixRotationRollPitchYaw()在一次调用中获取旋转矩阵的函数。

关于c++ - 我的矩阵乘法不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167000/

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