問題タブ [d3dx]
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.
c++ - D3DXGetImageInfoFromFile関数
関数を使用D3DXGetImageInfoFromFile()
すると、次のようになります。
Unhandled exception at 0x004114d4 in SAMPLE.exe: 0xC0000005: Access violation reading location 0x00000000.
エラーを含むコードは次のとおりです。
それで、ここで何が起こっているのですか?そして、代わりに数字を入力するとInfo->...
、すべてが正常に機能します...
c++ - How many D3DXEffect in usual?
I have to use several shaders. In this situation, which way is often prefered?
- Making several effects
- Only one effect and several technicque
- or another way
transparency - (D3D11)透明なテクスチャセクションは、レンダリングされたシーンではなく前のテクスチャを表示しています
本質的に2Dコンテキストで複数のテクスチャクワッド(画像)をレンダリングするアプリケーションがありますが、これは正常に機能しています。ただし、一部のテクスチャの一部が透明になるように変更した後、一見標準的で理論的に単純な方法で動作させることをやめました。テクスチャを順番に描画するだけです(これまでのように) )、およびテクスチャに透明なピクセルがある場合、それらのスポットに以前に描画されたものをすべて表示します。
ただし、代わりに実行しているのは、レンダリングターゲットの以前にレンダリングされた部分ではなく、透明なセクションの背後に、以前に描画された各テクスチャのスケーリングされたバージョンを表示することです。したがって、たとえば、不透明な背景テクスチャを描画してから、完全に透明な小さなテクスチャを描画しようとすると、背景はきれいに描画されますが、透明な画像には、新しい透明な画像のサイズ/位置に合わせて背景全体が拡大縮小されて表示されます。
後続のレンダリングされたテクスチャはこの方法で続行され、前にレンダリングされたテクスチャが最終的にどのように表示されたかを示します(前のテクスチャの要素を含む)。
DirectXのテクスチャ/ピクセルシェーダーがどのように機能するかについての基本的な何かが明らかに欠けています(私は比較的新しいので、これは驚くことではありません)が、オンラインですべてを読んだ後、私は調べて、無数の方法で実験することができました、私はまだ私が何をする必要があるのか理解できません。
ピクセルシェーダーで1つのテクスチャを使用していますが、これは問題の一部である場合とそうでない場合があります。シーンをレンダリングするたびに、レンダリングするすべてのテクスチャをループし、PSSetShaderResources()を呼び出して、異なるテクスチャをそのピクセルシェーダーテクスチャにバインドします。ループごとに、変更するたびにDrawIndexed()を呼び出します。ピクセルシェーダーに任意のテクスチャを使用させることができない場合(プリコンパイルする必要があります)、シェーダーテクスチャを大量に使用することは意味がないため、これは効果的な方法のようです。いいえ?)。
とにかく、私よりも知識のある人が自分の間違いにすぐに気付くのに十分な症状になることを願っています。これらの領域のコードは非常に単純ですが、いくつかのセクションを含めることもできます。
これまでのシーン、各シェーダーRVについて:
シェーダー:
ブレンドの説明の設定(問題がここにあるとは思わないでください):blendDesc.RenderTarget [0] .BlendEnable = true;
他のコードセグメントが役立つかどうか教えてください!
c++ - MSFT CreateDevice()関数へのHWND入力パラメーターなしでD3Dデバイスを作成する
私の疑いがばかげているか愚かであるならば、親切に私を許してください。私はDirectXプログラミングにまったく慣れていません。C ++の知識(非常に基本的なCOMの知識)を持っているだけです。
以下のコードサンプルは、MSDNのD3Dデバイスの作成からのものであり、D3Dデバイスを最初から作成する方法を説明しています。
MyDoubtは:
ここで、関数「pD3D-> CreateDeviceEx()」はパラメーターHWNDhwndを取ります。D3Dデバイスのインターフェイスでいくつかの関数を使用する必要があるコンマドラインC++win32アプリからD3Dデバイスを作成しようとするとどうなりますか。HWNDフィールドを取得するにはどうすればよいですか。この場合、D3Dデバイスを作成するにはどうすればよいですか。詳細に説明してください。
crash - DirectX アプリケーションが原因でコンピューターがクラッシュする
GeForce GT 555m グラフィックス カードを搭載した Alienware ラップトップで実行する DirectX11 アプリケーションを作成したので、コンピュータがそれをサポートしていることはわかっています。
ラップトップが電源に接続されていない場合、警告なしに電源が切れるという奇妙なことに遭遇しましたが、電源に接続されている場合、アプリケーションは正常に動作します。
DirectX に付属のサンプルを含む他の DirectX11 アプリケーションでこれを複製しようとしましたが、私のアプリケーションはそれを行う唯一のものですが、サンプルと非常によく似たコードを使用しています。何かが欠けているに違いないのですが、何がわかりません。
これは、SwapChain と RenderTargetView をセットアップするための私のコードです
そして、これは DepthStencilState と RasterState を設定するための私のコードです
何が起こっているのかについて何か考えがある場合は、助けてください!
c++ - ID3DXEffect->SetTexture を使用してバインドされたテクスチャをアンバインドします
FX フレームワークを使用して、FX フレームワークを使用してテクスチャをサンプラーにバインドするときに、少し問題が発生しました。
そのテクスチャがサンプラーにバインドされると、再度レンダリングすることはできません (たとえば、太陽の位置が変わったときなど)。私が行うと、このエラーが発生します:
Direct3D9: (警告) :テクスチャとしても使用されているレンダー ターゲットにはレンダリングできません。レンダー ターゲットがバインドされていることが検出されましたが、レンダリングでテクスチャが実際に使用されたかどうかを検出できませんでした。
ただし、FX フレームワークなどを使用して確実にテクスチャを「設定解除」する方法がわかりません。私はいくつかのことを試しました:
- ID3DXEffect->SetTexture(FXShadowtex,NULL)。これにより、クラッシュが発生します。
- ID3DXEffect->SetTexture(FXShadowtex,SomeDummy)。これは本当に醜いです。
- コンパイル後に fx ファイルで定義されたサンプラーに対応するサンプラー インデックスを見つけ、それを NULL に設定します: IDirect3DDevice9->SetTexture(i,NULL)。これは明らかにあまり実用的ではありません。
- 警告を忘れてください。これにより、D3D のデバッグ出力が無限のスパムのおかげで役に立たなくなり、非常に見苦しくなります。
- レンダリングを行う前に、ゼロから fx ファイルで定義されているサンプラーの数までループし、それらをすべて NULL に設定します。これも醜い。
私が忘れている他のアプローチはありますか?上記の「解決策」のいずれかが必要悪である理由を説明することも問題ありません。:)
c++ - ID3D11ShaderResourceView を使用した D3DX11SaveTextureToFile
がありID3D11ShaderResourceView * textureResView
、そのテクスチャをファイルに保存したいと考えています。最初に を抽出する必要があると思いID3D11Texture2D
ますので、コードを作成しました。
残念ながら、それは を返しますE_FAIL
。私は何を間違っていますか?
windows-8 - Windows 8でのD3DXCreateFontの代替手段?
フックされたDirectX9アプリケーションで少し遊んでいます。ご存知かもしれませんが、D3DXフレームワークはWindows8で非推奨になりました。Microsoftは、「Direct3DAPIを使用するための代替ソリューションを調査する」ことをお勧めします。Windows 8で便利なD3DXCreateFontを使用するための代替ソリューションは何ですか?私はDirectXバージョン9を使用しています。それでもWindows8でD3DXフレームワークを参照できる場合は、これが私の推奨されるソリューションです。
direct3d - フレームごとにピクセルシェーダーでTexture2Dを更新する方法(D3D10)?
D3D10 を使用して、2D の四角形を描画しており、毎秒数回変化するテクスチャ (ビットマップ) で塗りつぶしたいと考えています (ビデオの表示など)。
Texture2D 変数を使用してシェーダー効果を使用し、ID3D10EffectShaderResourceVariable を更新してメッシュを再描画しようとしています。
私の実際の使用法は、メモリからビットマップをコピーし、UpdateSubresource を使用することです。しかしうまくいかなかったので、縮小して 2 つの DDS イメージ間の切り替えをテストしました。その結果、期待どおりに最初のイメージが描画されますが、2 つのイメージを切り替えるのではなく、引き続き描画されます。
D3D初心者です。この方法がまったく機能するかどうかを説明したり、正しい方法を提案したりできますか.
シェーダー効果:
コード (多くの部分をスキップ):