問題タブ [direct3d]
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.
opengl - direct3dとopenglの間でテクスチャを共有しますか?
OpenGLとDirectXを混在させることは推奨されないことは知っていますが、別々のグラフィックAPIを使用する2つの異なるアプリケーション間のブリッジを構築しようとしています。データ、特にテクスチャを共有するための手法があることを望んでいます。
次のようにDirect3Dで作成されたテクスチャがあります。
システムメモリを往復せずにOpenGLからこのテクスチャを使用できる方法はありますか?
c++ - 「乗算」ブレンディング モードとアルファを使用した Direct3D レンダリング 2D イメージ
Photoshop フィルター乗算を Direct3D で複製しようとしています。私はさまざまなレンダリング状態について読んでグーグルで調べてきましたが、効果はほとんど機能しています。問題は、テクスチャのアルファ値を無視していることです。
状況を説明する画像は次のとおりです。
http://www.kloonigames.com/petri/stackoverflow_doesnt_allow_.jpg
これに対する 1 つの解決策を見つけました。それは、画像を透明度なしで白い背景で保存することでした。しかし、私はこの解決策に満足していません。問題は、本当にアルファ値を使用する必要があることです。画像を徐々にフェードアウトさせたい。ブレンドモードがアルファ値を無視している場合、これを行うことはできません。
問題は、画像をアルファでレンダリングする方法です。
ブレンドモードのコードは次のとおりです。
編集により SetTextureStageState が追加されました
math - ワールド xz 平面上のスクリーン空間にグリッドを投影します
ここに示すように、xz平面にグリッドを投影したい:
そのために、x と z の範囲が [-1|1] の頂点グリッドを作成しました。シェーダーでは、頂点の xz スクリーン座標に View-Projection マトリックスの逆数を掛けます。次に、新しいワールドの xz 座標に応じて高さを調整し、最後にこれらの座標を View-Projection マトリックスで乗算してスクリーン空間に戻します。
理由はわかりませんが、非常に奇妙な飛行機が画面に表示されます。使用する数学演算は正しいですか?
3d - 3Dアプリケーションでターゲティング円を描画する
私は学習のためだけに3Dゲームに取り組んでいます。
ハイトマップから生成された3Dワールドと、そのワールドにオーバーレイされたさまざまなメッシュベースのオブジェクトがあります。
プレイヤーが自分にできる世界のオブジェクトをターゲットにできるようにしたいのですが、ターゲットの対象が立っている地形やオブジェクトにターゲットの円を描きたいのです。World of Warcraftをプレイしたことがある場合は、私が何を意味するのかがわかります。誰かをターゲットにすると、その下の床に赤い円が描かれます。
しかし、それは彼らが立っているものすべてに投影されます。これは地形である可能性があります。したがって、一方の円の一部と他方の円の一部で、異なる勾配を持つ異なるメッシュポリゴンに投影する必要がある場合があります。または、アイテムに投影する必要がある場合があります。または、おそらく一方に一部、もう一方に一部。
これを効率的に行う方法はありますか?チートと近似も大歓迎です。ゲームではいつものように、100%正確ではなく効果的に見えるものを探しています。
ソリューションにとって重要な場合は、directx9とシェーダーモデル2を使用します。
c++ - 全画面表示の direct3d 9 アプリケーションの Aero フリップ/サムネイルにサムネイルが表示されない
これは Web のどこかにあるはずですが、検索用語に問題があります (関係のないものがたくさん出てきます)。とにかく、Direct3D9 アプリケーションを持っています。Vista および Windows 7 で全画面表示で実行し、Alt-Tab または Win-Tab を押すと、アプリケーションがサムネイル/プレビュー/ライブ ビューに空白で表示されます (正しい用語がわからない)。バックバッファをサムネイルに描画できる場所に応答できる API または通知はありますか?
c++ - D3D9 で SetTransform を使用できない
IDirect3DDevice9::SetTransform の動作を妨げるものは何ですか? 私は Direct3D9 で変換行列を使用するための多くのチュートリアルを見てきました。そして、私が知る限り、彼らは皆同じようにやっています。
テクスチャポリゴンを変換するためだけにコードを書こうとしています。D3DXMatrixTranslation で初期化されたマトリックスを使用して SetTransform を呼び出すと、S_OK が返されます。ただし、画面に描画される実際のポリゴンは変換されません。
.net - D3D パフォーマンスの比較、シェーダーとビルトイン シェーディング
D3D に組み込まれた実行中の 3D エンジンがあります (SlimDX 経由)。レンダリング パイプラインの中断を避けるために、同じマテリアルを持つ多くのオブジェクトをより大きなメッシュにまとめました (状態の切り替えを減らすため)。これはうまく機能し、私のニーズに適したパフォーマンスレベルを提供します.
私が直面している問題は、実行時に、これらの大きなバッチ メッシュのサブセットのマテリアル プロパティを変更する必要があることです。そのために属性バッファを使用していますが、かなりうまく機能しています。以前は限られた数のアクティブ アトリビュート (メッシュあたり約 5 つ) を使用していましたが、今ではマテリアルにさらに多くのバリエーション (不透明度/カラーブレンドのさまざまな色合い) が必要であり、最終的には 100 以上の組み合わせになる可能性があります。これらの変更は実行時に発生するため、レンダリングが開始される前にそれらをまとめることはできません。確かにメッシュを再構築することはできましたが、それは遅く、マテリアル間の切り替えはインタラクティブな速度で行う必要があるため、そうではありません。
だから私の質問は、どのルートを取るのが最善ですか?
必要に応じて使用可能な属性 ID で顔を動的にマスクし、完了したらリセットする、より堅牢な属性処理システムを実装する必要がありますか? アトリビュート バッファのフラグメンテーションがパフォーマンス ヒットを追加することを聞いたことがあります。また、間にマテリアル スイッチがある後続の DrawSubset() 呼び出しのパフォーマンス ヒットについても確信が持てません (つまり、いつが多すぎて、いつアトリビュート配列を最適化する必要がありますか?)。これについて経験のある人はいますか?
私のもう 1 つのアイデアは、パラメーター化されたピクセル シェーダーを使用することです。派手なエフェクトは必要ありません。最低限必要なだけです (現在は、色のみで一部のオブジェクトが透明な組み込みのフラット シェーダーです)。そのため、シェーダー モデル 1 で十分です。ここでのアイデアは、1 つの汎用シェーダーを使用し、呼び出し間でマテリアルを切り替える代わりに、いくつかのシェーダー パラメーターを変更することです。しかし、これがマテリアルの切り替えよりも速いかどうか、および/またはプログラム可能なシェーダーがビルドインシェーダーよりも遅いかどうかはわかりません(同じ結果が与えられた場合)。
また、メッシュの切り替えと 1 つの大きなメッシュでの異なるサブセットの描画との間のパフォーマンス ヒットの違いについても興味があります (両方のケースで同じ数のマテリアル スイッチが与えられた場合)。
これらの質問は、GFXカードとそれぞれのパフォーマンス/年齢によって多少異なる場合があることを理解していますが、ここでは、何に最も力を注ぐべきかについての一般的なガイドラインを探しています (つまり、どのタイプの状態スイッチ/ CPU 干渉が最大のGPU ヒット)。メモリも懸念事項であるため、メッシュ全体 (または大部分) を複製する実装は私には不可能です。
私の焦点は、古い (5 歳)/機能の少ない/統合された GFX カードでのパフォーマンスであり、必ずしも最上位のゲーマー カードやワーク ステーション カード (Quadro など) ではありません。特定のボードでシェーダーのパフォーマンスがどれだけ優れているかに応じて、シェーダーを使用したソリューションを成功または失敗させる可能性があると思います。
すべての提案とフィードバックは大歓迎です。
よろしくお願いします!
java - 宇宙シミュレーター用 OpenGL
数人の友人と一緒に、このアマチュア プラットフォームに依存しない Java ベースの宇宙戦闘シミュレーター ゲームのプロジェクト (翼の司令官の長い死んだ物語のようなもの) を開始しました。私たちの誰も 3D プログラマーではないので、道のりは長いでしょう。
私の質問は: 私たちの代わりに OpenGL の学習を開始しますか (おそらく GLUT を介して)、または今日より良い可能性はありますか? Direct3D はどうですか?お勧めの本はありますか?具体的には、カップルを注文しました
- Dave Shriner の OpenGL プログラミング ガイド
- Luke Benstead の OpenGL ゲーム プログラミング入門
directx - DirectXでブリットをストレッチすると、エッジがギザギザになります
固定解像度(たとえば800x600)でウィンドウまたはフルスクリーンで実行されるDirect3Dアプリがあります。ワイドスクリーンモードをサポートするために、800x600でバックバッファーにレンダリングしてから、Bltを使用してフロントバッファーの一部(通常は1280x720など)に最終フレームを描画します。したがって、800x600の画像は960x720に引き伸ばされ、アスペクト比。
これは正常に機能しますが、一部のビデオカード/ OS /ドライバーの組み合わせ(nVidia Quadro、DX11、Windows 7)では、ブリットがポイントサンプリングを使用して行われているように見え、エッジがギザギザになり、最終的な画像が全体的に滑らかになりません。
これを回避する方法はありますか?たとえば、スケールアップするときにBltに線形フィルターを使用するように強制しますか?
(注:元の800x600アセットを最後にストレッチする代わりに960x720にレンダリングできることはわかっていますが、他にも欠点があるため、最後にストレッチすることをお勧めします)
opengl - Direct3d から OpenGL へ
私は現在、古い Visual Basic アプリケーションを Java で書き直しています。作業の大部分は、Direct3d を jogl に置き換えることです。
私は Direct3d を扱った経験がなく、Opengl を使用した経験も最小限しかないため、API 呼び出しの適切な代替品を見つけるのに苦労しています。
良いガイド/チュートリアルまたはリファレンスはありますか?
編集:
追加情報:
- Direct3D バージョン 8