半径 2 の点 (10,6,10) の周りに点 (20,6,30) を回転させようとしていますが、これまでのところ失敗しています。原点を中心にポイントを回転するには、回転行列にワールド行列を掛けるだけで、ポイントを自分の周りで回転させるには、ポイントを原点に変換してから回転させて元に戻すことを知っていますが、この問題にどのようにアプローチするかはわかりません。
2 に答える
必要に応じて、いくつかの C++ コードをまとめることもできます (D3DX は非推奨であるため、D3DX からは離れています) が、自分で物事を理解することはプログラミングの大きな部分を占めると思います。これは、3d 点 v1 を中心に 3d 点 v2 を回転させる計算です。それが役に立てば幸い:
1.) v1 から v2 を減算して差分ベクトルを計算します。v3 に格納します。
2.) v3 を、半径、ヨー、およびピッチによって定義される の表記法である球面座標に変換します。
3.) シータ (ヨー) とファイ (ピッチ) の値を必要に応じて変更します。
4.) v3 をデカルト (x、y、z) 座標に変換し直し、v1 の座標を追加します。それが v2 の新しい位置があるべき場所です。
注 1 - 物理学では、シータとファイの意味が入れ替わっているため、シータはピッチ、ファイはヨーです。数学では、シータはヨー、ファイはピッチです。
注 2 - ヨー、ピッチ、ロールは次のように記述されます。
注 3 - D3DX に関するウィキペディア: 「2012 年に、Microsoft は、XNA などの他の開発フレームワークと共に、D3DX が Windows 8 SDK で非推奨になることを発表しました。新しいライブラリ: DirectXMath ."