次のように簡単だと思いました:
Vector3 point = Vector3.Transform(originalPoint, worldMatrix);
しかし、明らかにそうではありません...それは、ポイントの数が数千に及ぶことを意味します.
基本的に、私がやろうとしているのは衝突システムを作成することであり、このシステムの 2 つのポイントはすべて線なので、基本的には線を衝突させたいと考えています。ワールド マトリックスに基づいてラインをスケーリング、回転、および移動できるようにしたい (衝突ラインがオブジェクトのスケール、回転、および移動と同調するようにするため)。
私は何時間も試みてきましたが、それを理解できないようです。ビュー マトリックスも掛けてみましたが、それが私が望むものに最も近いものですが、2 つの数値セットを切り替えているようです! 1セットのままでよければ完璧なのに、なぜ変化し続けるのかわかりません...
何か助けてください。:(
編集:少し追加すると、更新呼び出しでポイントを常に更新しています。しかし、それが何かを変えるかどうかはわかりません。いずれにしても、最初にポイント=オリジナルポイントです。
Steve H: 1 つの線には 2 つの点があるため、次のようになります。
originalPoint[0] = new Vector3(-42.5f, 0f, 0f);
originalPoint[1] = new Vector3(42.5f, 0f, 0f);
point[0] = Vector3.Transform(originalPoint[0], worldMatrix);
point[1] = Vector3.Transform(originalPoint[1], worldMatrix);`
最初はpoint[0] & [1]
と同じoriginalPoint[0] & [1]
です。でも、プレーヤーを数ピクセルでも動かした瞬間…
point[0] = (-5782.5f, 0f, 0f)
point[1] = (-5697.5, 0f, 0f)
プレイヤーの位置は-56.0f
です。
私worldMatrix
は次のように行きます:
_world = Matrix.Identity // ISROT
* Matrix.CreateScale(_scale) // This object's scale
* Matrix.CreateFromQuaternion(_rotation) // It's rotation
* Matrix.CreateTranslation(_offset) // The offset from the centre
* Matrix.CreateFromQuaternion(_orbitRotation) // It's orbit around an object
* _orbitObjectWorld // The object to base this world from
* Matrix.CreateTranslation(_position); // This object's position
オブジェクトはグラフィックで正しく表示されます。スケーリング、回転、移動は完全に問題ありません。それらは軌道のスケール、回転、平行移動にも従いますが、軌道についてはまだあまりテストしていません。
これが十分な詳細であることを願っています...
編集:さらに調査すると、元のポイントも変更されています... :| なぜそれが起こっているのかわかりません。それらは新しいポイントとまったく同じです...