問題タブ [xna-math-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
384 参照

c++ - 関数後のベクトル割り当てのパフォーマンス

私はこのコードを使用します:

私はfps1900000を持っていますが、これを使用すると:

私はfps=200です。なぜですか?

0 投票する
2 に答える
11749 参照

c++ - XMVECTOR メンバー変数を適切に使用する方法

位置、スケーリング、および回転のメンバーを持つ単純な IRenderable クラスがあります。

コンストラクターでそれらを設定しようとしています。最初の方法では、_rotation を設定しようとしてアクセス違反 0x00000000 が発生します (_position と _scaling はどちらも適切に設定されています)。

代わりに _rotation を XMVECTOR* にし、コンストラクターで _rotation(new XMVECTOR()) を使用すると、空の XMVECTOR に設定されますが、後で ID クォータニオンを設定しようとすると、アクセス違反がスローされます。

コンストラクターで XMQuaternionIdentity のアドレスを使用すると、オブジェクトの作成時に問題なく動作します。

しかし、クォータニオン自体には、レンダリングに使用する必要があるまでにガベージ データが含まれます。これらすべての状況で、_position と _scaling の両方が正常に機能しています。

この状況で XMVECTOR を使用する正しい方法は何ですか?

0 投票する
2 に答える
12336 参照

c++ - DirectXMath で 2 点間の距離を取得する最良の方法は何ですか?

新しい XMVECTOR および XMFLOAT3 クラスを使用して、2 点間の距離を取得する最良の方法は何ですか? XMVector* ファミリの関数でそれを行う関数が見つからなかったため、次のように思いつきました。

これは、組み込みの最適化を使用するため、x、y、z に 3 つの float しかなく、sqrt を使用する通常の Vector3 クラスよりも高速ですか? すなわち:

0 投票する
4 に答える
3301 参照

c++ - m = XMMatrixIdentity() の後にクラッシュする - クラス内のアラインメント メモリ?

DirectX SDK のチュートリアルを見ていました。チュートリアル 5 は正常に動作しますが、コードをコピーして独自のクラスに分離した後、アプリケーションの起動中に奇妙なエラーが発生しました。

行は次のとおりです。

そのため、次のような xnamathmatrix.int operator= でエラーが発生しました。

エラーメッセージは次のとおりです。

XMFLOAT4X4 / XMMATRIXに接続された何かが原因である可能性があることをどこかで読みました:

XMFLOAT4X4 を使用して行列を格納し、XMMATRIX のみを使用することを検討しましたか?

しかし、私はすでに XMMATRIX を使用していると思います。

MyClass.h:

MyClass.cpp:

XMMATRIX g_World1; を変更する必要はないと思います。XMFLOAT4X4 g_World1 に、次のようなエラーが生成されるためです。

エラー C2679: バイナリ '=' : 'XMMATRIX' 型の右側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)

0 投票する
2 に答える
238 参照

dll - DLL クラスでの XNA Math の使用

作成中の DLL で XNA Math を使用すると問題が発生します。DLL 内にあり、エクスポートされるクラスがあります。XMVECTOR 型のメンバー変数があります。クラス コンストラクターで、XMVECTOR の初期化を試みます。読み取り場所 0x0000000000 からの読み取りでアクセス違反が発生しました

コードは次のように実行されます。

このクラスは、エクスポートされる DLL 内にあることに注意してください。さらなる情報だけでこれが違いを生むかどうかはわかりません。

また、私がそれに取り組んでいる間、別の質問があります:

警告も表示されます: struct '_XMMATRIX' needs to have dll-interface to be used by clients of class 'DLLClass'

これは致命的ですか?そうでない場合、それは何を意味し、どうすればそれを取り除くことができますか? この DLLClass はエクスポートされ、DLLClass の「クライアント」はおそらく変数「matr」を使用することに注意してください。

どんな助けでも大歓迎です。

編集: 追加情報: コードを 1 行ずつデバッグしましたが、XMLloadFloat3 の戻り値が vect に割り当てられたときにエラーが発生したようです。

0 投票する
1 に答える
1463 参照

directx-11 - DirectXMath を使用して法線を効率的に計算する

各頂点に x、y、z 座標がある頂点のベクトルがあるいくつかの三角形の法線を計算する必要があります。i1、i2、i3 は、三角形の 3 つの頂点のベクトルのインデックスです。

私は<DirectXMath.h>これを使用して書いていますが、これはうまくいくようです。

しかし、実際の計算よりも多くのロードとストアがあるように見え、実際にこれを行うより良い方法があるかどうか疑問に思っていましたか? それとも、ロードとストアは「安価な」操作ですか?

すべての三角形に対してこれを実行する必要があり、コードの残りの部分に比べてかなりの時間がかかるため、速度の向上は歓迎されます。

0 投票する
2 に答える
1489 参照

c++ - クラッシュの原因となる行列

Direct3D11 アプリケーションに奇妙な問題があり、既に数時間解決しようとしています。問題はその方法です:

その行に到達するまで、すべて問題ありません。

どういうわけか、それはアプリケーションのクラッシュを引き起こします (正しいと応答しないように切り替えます)。

実際の呼び出しは次のようになります。

事前に、Vertex シェーダーと Pixel シェーダーは正常にコンパイルされるため、問題はありません。ほとんどの場合、私は xnamath で何か間違ったことをしています (私はまったく新しいものです) が、地球上で何ができるのかわかりません。前もって感謝します。必要に応じて、さらに情報を提供します。

編集@1: 数十回の変更により、Projection および World マトリックスを機能させることができました。私はまだビューマトリックスを設定できませんが。コードを変更したので、実際のものと一致し、重要でないものを取り除きました。

編集@2: 直前の速報: XMMatrixLookAtLH 関数に問題はありません。結果をローカル変数に保存することにしたため、機能しますが、結果マトリックスをクラス メンバーに割り当てたい場合は、クラッシュが発生します。 . それは確かに興味深いです。

0 投票する
1 に答える
150 参照

c++ - XNAMATH で最適化された割り当てられたオブジェクトをスタックする

私は最近、歴史的に x64 プラットフォーム構成を使用して開発されてきた DirectX 11 アプリケーションのプロファイリングと最適化を開始しました。拡張命令セットを使用するときの動作をテストするために x86 に切り替えた後、特定のオブジェクトが最適化されていないことに気付き始めました。具体的には、スタック割り当て XMMATRIX オブジェクトです。これは、x86 リリース構成 (x64 リリースで正常に動作) でビルドする場合にのみ発生し、正しいライブラリにリンクするようにしました。また、埋められたプロジェクト設定を誤って変更しないように、新しいプロジェクトをテストしました。C++ コードの最適化をオフにすると問題が停止することを確認しました。Windows x86 プラットフォーム向けの開発時に XNAMATH ライブラリを使用しようとしたときに見落とした特定の使用要件はありますか?

コードスニペットで更新

0 投票する
2 に答える
199 参照

c++ - New stops my object working correctly

I've had to completely rewrite this problem as I've found out a lot more about it now.

Background:

My programme is drawing some 3d objects under directx11. I have a class that contains the data, pointers, and functions needed to draw the required 3d objects. Everything was working well. I could create many different 3d objects and draw them wherever I wanted. Great!

Then I needed to put them in a container and into a vector so I didn't have to create each object manually, this was where the trouble started; it would crash 1 time in 5 or so.

It crashed when using vectors and maps. I continued this line of enquiry and tried using a pointer and new:

This also caused it to crash when I ran its draw function.

However if created as a standard object:

The draw function never crashes.

Likewise, creating a pointer to threed_cube_ works as expected.

Question:

What is new doing that the default constructor isn't. Is there anything I should be looking at to resolve this problem?