Вращение DirectX вдоль другой плоскости - PullRequest
2 голосов
/ 14 сентября 2010

Есть ли способ повернуть объект по другой плоскости? Я делаю трехмерную модель солнечной системы, и я бы хотел, чтобы Плутон вращался вокруг Солнца на плоскости, отличной от плоскости других планет. В настоящее время у меня есть первые восемь планет, вращающихся вокруг Солнца в плоскости XZ (вращение вокруг оси Y). Есть ли простой способ сделать это, не вдаваясь в сложную математику? Вот как я реализовал мои другие планеты,

D3DXMATRIX marsMat;
D3DXMATRIX marsScale;
D3DXMATRIX marsTrans;
D3DXMATRIX marsAxisRot;
D3DXMATRIX marsRot;

D3DXMatrixScaling(&marsScale,0.45,0.45,0.45);
D3DXMatrixRotationY(&marsAxisRot,D3DXToRadian((GetTickCount()-start)*0.07));
D3DXMatrixTranslation(&marsTrans,-17,0,0);
D3DXMatrixRotationY(&marsRot,D3DXToRadian((GetTickCount()-start)*0.007));

marsMat = marsScale * marsAxisRot * marsTrans * marsRot;

matrixStack->Push();
{
   matrixStack->MultMatrixLocal(&marsMat);
   d3ddev->SetTransform(D3DTS_WORLD,matrixStack->GetTop());
   marsMesh->DrawSubset(0);
}
matrixStack->Pop();

1 Ответ

1 голос
/ 15 сентября 2010

D3DXMatrixRotationAxis - это то, что вы хотите.

Помните, что на самом деле плоскость - это вектор, перпендикулярный плоскости, которую она описывает, где параметр D описывает расстояние от начала координат.Поэтому используйте параметры A, B и C для создания вектора.Нормализуйте его и используйте в качестве оси вращения.Затем вы можете перевести его так, чтобы его происхождение было независимо от того, где находится ваше Солнце (которое в любом случае вполне может быть точкой начала вращения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...