1

D3D の Camera クラスに Pitch/Yaw を実装しようとしていますが、Pitch() 関数が「Access Violation reading location 0x0000008C」をスローします。

少しグーグルで調べたところ、16ビットのアライメントのため、クラス/構造体でXMVECTORを使用できないことがわかりました。しかし、私はすでにそれを知っていたので、それが XMFLOAT3 として宣言されていることを再確認しました。

問題は、Camera クラスの他のすべての関数 (ビュー マトリックスの更新など) で、例外をスローしないことです。それはちょうどその1つの機能にあります!

したがって、関数をクラッシュさせるクラス変数を宣言する方法は次のとおりです (ただし、すべての変数で関数がクラッシュし、同じ方法で定義されます)。

XMFLOAT3 mRight;

Pitch 関数を宣言する方法は次のとおりです。

void Pitch(float a)
{
    //Here it makes my code crash
    XMMATRIX R = XMMatrixRotationAxis(XMLoadFloat3(&mRight), a);

    //Store and compute
    XMStoreFloat3(&mLook, XMVector3TransformNormal(XMLoadFloat3(&mLook), R));
    XMStoreFloat3(&mUp, XMVector3TransformNormal(XMLoadFloat3(&mUp), R));
}

x64でもまったく同じ結果が得られますが、アーキテクチャとしてx86も使用しています(メモリの場所を除く:D)。I も DirectXMath ライブラリも、"mRight" の x、y、および z 値にアクセスできません。私の場合は「mRight.x」、DirectXMath の場合は「__m128 x = _mm_load_ss( &pSource->x );」です。

いくつかの新しいデバッグ結果: これは、WM_MOUSEMOVE イベントから「任意の」関数を呼び出したときに発生します。私の関数 Walk() でさえ、キーが押されたときに呼び出すと完全に機能します。

これまでで最も奇妙なこと!

助けてくれてありがとう!

4

1 に答える 1

0

私は自分の間違いを知っています!! そのコードを使用するクラスに無効なポインターを与えていました:D修正しました

于 2014-09-30T16:04:16.990 に答える