1

次のように簡単だと思いました:

 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

オブジェクトはグラフィックで正しく表示されます。スケーリング、回転、移動は完全に問題ありません。それらは軌道のスケール、回転、平行移動にも従いますが、軌道についてはまだあまりテストしていません。

これが十分な詳細であることを願っています...

編集:さらに調査すると、元のポイントも変更されています... :| なぜそれが起こっているのかわかりません。それらは新しいポイントとまったく同じです...

4

1 に答える 1

0

私は自分の問題を理解しました...-_-

したがって、ラインポイントを作成した後、最後にこれを行います。

originalLines = collisionLines;

collisionLinesoriginalLinesは両方ともVector3[]配列です。

片方をもう片方と同じにするだけで、まったく同じで、片方を変えるともう片方が変わるようなものだと思います...それは私が知らなかったことです。

だから私はこの関数を作りました:

void CreateOriginalPoints()
{
    _originalPoints = new Vector3[_collisionPoints.Length];

    for (int i = 0; i < _collisionPoints.Length; i++)
        _originalPoints[i] = _collisionPoints[i];
}

そして、これは問題を完全に解決します。そもそもなぜこの問題が起こったのか、私には完全に理解できます。

Donnie&Steve Hに感謝します。2人が私の質問に答えなかったのは知っていますが、答えが見つかるまで、さらに深く調べてみました。

于 2012-12-09T16:41:07.033 に答える