問題タブ [directxmath]

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 に答える
1157 参照

c++ - autoキーワードを使用する場合、配置16は尊重されませんか?

VS2012でコンパイルし、DirectXMathライブラリを操作しているときに、コンパイラがXMMATRIXを調整していないように見える問題が発生しました。問題を次のように簡略化しました。

コードを何度も再実行すると、最初の転置で「アクセス違反の読み取り場所0xFFFFFFFF」が発生する場合があり、2番目の転置で発生する場合があります。

これは、m1とm2が適切に位置合わせされていないことが原因であることがわかりました。「auto」を「XMMATRIX」に置き換えると問題が解決するようです。コンパイラのバグが疑われますが、何か間違ったことをしている、または一部のオプションを有効にしていない可能性もあります。

私のコードに何か問題がありますか、それともこれはコンパイラのバグですか?

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

c++ - std::accumulate を使用して、個別に定義されたインデックスが指すベクトルの値をきちんと合計する方法 (ループを置き換える)

ベクトル/(非対称)行列(対称のような構造を持つ行列は、もちろんループで利用できますが、私には関係ありません質問) インデックスのコレクションによってポイントされます。基本的に、このコードは、たとえば 2D マトリックスを通るルートのコストを計算するために使用できます。GPUではなくCPUを利用する方法を探しています。

関連するコードを次に示します。私がより興味を持っているのは最初のケースです。ラムダを使用してインデックス ベクトルをキャプチャすることは可能だと考えていましstd::accumulateたが、おそらく他の演算子を使用して、より適切な方法が既にあるかどうか疑問に思いました。ループは私の好みでも非常に明確であるため、「本当の問題」ではありませんが、非常にきちんとした、またはより効率的なオンラインライナーを探しています...

ああ、PPL / TBBも公正なゲームです。

編集

後付けとして、ジョンにコメントしたように、入力と出力の型が異なる可能性があるため、計算にstd::common_typeを使用する場所はありますか? これは少し手を振っており、テクニックやライブラリの学習に似ています。よろしければ、コード kataの形式。

編集 2

現在、ブロガーtheowl84によるSSE コードを使用して STL ベクトルを処理する方法に関するブログ記事で説明されているように、ループを高速化するオプションが 1 つあります。コードは を使用していますが、 DirectXMathライブラリにも何かあるのではないでしょうか。__m128 directly

編集 3

さて、いくつかの具体的なコードを書いた後、私std::accumulateはうまくいかないことがわかりました。または、少なくとも、それ自体が現在の値と合計のみにアクセスできるため、きちんとした方法でその[indices[i + 1]部分を実行する方法を見つけることができませんでした。その点では、小説家のアプローチが最も実りあるものに見えます。matrix[indices[i]][indices[i + 1]];std::accumulate

DeadMGは、アソシアティビティに関する注意事項を伴うparallel_reduceの使用を提案し、 novocratによってさらにコメントされました。インターフェイスがちょっと面倒に思えたので、 parallel_reduceを使用できるかどうかは調べませんでした。それ以外は、私のコードはシリアルに実行されますが、並列削減バージョンと同じ浮動小数点の問題が発生する可能性があります。パラレルバージョンは、シリアルバージョンよりも(はるかに)予測不可能になる可能性がありますが、私は思います.

これは少し関係がありませんが、ここでつまずいた人にとっては興味深いかもしれませんし、ここまで読んだ人にとっては、NAG ブログの Wandering Precision の記事に (非常に) 興味があるかもしれませ。再注文!次に、#AltDevBlogADay同期 RTS エンジンと非同期の話 の分散設定で、まさにこの問題についていくつかの反省があります。また、ACCU (ちなみに、一般的なメーリング リストは優れており、参加は無料です) には、浮動小数点の精度に関する記事 (たとえば、この) がいくつか掲載されています。接線から接線へ、幾何学的計算におけるFernando Cacciola のロバストネスの問題を見つけました 元は ACCU メーリング リストからの良い記事です。

そして、std::common_type. そのための使用法が見つかりませんでした。パラメータとして2つの異なるタイプがある場合、戻り値はによって決定される可能性があります/決定されるべきstd::common_typeです。おそらく、より適切なのはstd::is_convertiblestatic_assert目的の結果の型が引数の型から変換可能であることを確認することです (明確なエラー メッセージを使用して)。それ以外は、戻り値/中間計算値の精度がオーバーフローなどのない合計の結果を表すのに十分であることを確認することしかできませんが、そのための標準的な機能に出くわしていません。

それについては、ご列席の皆様。私は自分自身を楽しんだ、これを読んでいる人もこれから何かを得ることを願っている.

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

windows-8 - WindowsStoreアプリプログラミングでの3Dベクトルのコンポーネントごとの乗算

2つの3Dベクトルのコンポーネントごとの乗算を行う方法は?MSはDirectXMath.hでそのような機能を提供していなかったようですが、Microsoftはそこで何をしていますか?古いSDK(DX 10/9)では、次のように2つのベクトルの積を直接作成できます。

v3 = v1 * v2;

または、次のようなスカラーをベクトルに乗算します。

v2 = v1 * 1.0f;

でも今はXMVECTORタイプの演算子*がないのでできません。だから私は手動で製品を作る必要があります

v3 =(v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);

それほど難しいことではありませんが、DirectXMathはそのような基本的な機能を提供するはずだと思います。

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

directx - XMMATRIXメンバー値をダンプするには?

XMMATRIX と XMVECTOR をダンプする良い方法はありますか?

DumpMatrixみたいな機能が欲しい。

確認しDirectMath.hました。そして、見つけた

(x, y, z, w)__m128から抽出するには?