タグ付けされた質問 「directx11」

DirectX 11は、Windows、Xbox One、Windows PhoneなどのMicrosoftプラットフォームの主要なグラフィックAPIです。

4
レンダリングコードでID3D11InputLayoutを処理するのに最適な方法は?
directx11コードで入力レイアウトを処理するエレガントな方法を探しています。 EffectクラスとElementクラスがあるという問題があります。エフェクトクラスはシェーダーと同様の設定をカプセル化し、Elementクラスは描画可能なもの(3dモデル、lanscapeなど)を含みます 私の描画コードは、指定された効果を使用してデバイスシェーダーなどを設定し、次にElementのdraw関数を呼び出して、それに含まれる実際のジオメトリを描画します。 問題はこれです-どこかにD3D11InputLayoutを作成する必要があります。これは実際にはElementクラスに属します。これは、その要素が頂点レイアウトを表すためにどのように選択するかは、システムの他の部分のビジネスではないためです。ただし、オブジェクトを作成するために、APIはオブジェクトの描画に使用される頂点シェーダーの頂点シェーダーバイトコードを必要とします。directx9では簡単で、依存関係がなかったので、要素に独自の入力レイアウト構造を含め、影響を与えることなくそれらを設定できました。 しかし、要素は、それが描画されている効果について何も知っている必要はありません。それは単にレンダリング設定であり、要素はジオメトリを提供するために存在します。 そのため、保存する場所と、各描画呼び出しに対してInputLayoutを選択する方法が本当にわかりません。つまり、私は何かを働かせましたが、それは非常に醜いようです。 これは私が何か明白なものを逃したことを私に引き起こします、さもなければ、すべてのレンダリング設定をエフェクトに、要素にジオメトリを、そしてそれをすべて描画するサードパーティを持っている私のデザインはただ欠陥があります。 他の誰かがdirectx11で入力レイアウトをエレガントな方法でどのように処理するのか疑問に思っていますか?
7 directx11 

3
これらのDirectX11呼び出しのうち、実際にデータをGPUに送信するのはどれですか。
グラフィックプログラミングとDirectX11を学ぼうとしています。 CPU-GPU転送とグラフィックプログラミング全般を最小限に抑える方法を学びたいと思っています。 オンラインリソースから自分に答えることができなかったという質問があります。 実際にデータをGPUに送信するD3Dメソッドはどれですか(同等に、静的メッシュの場合、すべての頂点データがフレームごとに、または1回だけGPUに渡されますか)。 コードは次のとおりです: (stackexchangeの簡略化) 私の「メッシュ」クラスには、頂点バッファーがあります。 ID3D11Buffer *m_pVBuffer; メッシュのコンストラクターで、いくつかの頂点を頂点バッファーに設定します。 D3D11_MAPPED_SUBRESOURCE ms; devcon->Map(m_pVBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); memcpy(ms.pData, &vertices[0], sizeof(VERTEX) * vertices.size()); devcon->Unmap(m_pVBuffer, NULL); 次に、メッシュの「レンダリング」メソッドでこれを行います。 UINT stride = sizeof(VERTEX); UINT offset = 0; devcon->IASetVertexBuffers(0, 1, &m_pVBuffer, &stride, &offset); devcon->IASetIndexBuffer(m_pIBuffer, DXGI_FORMAT_R32_UINT, 0); devcon->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); devcon->DrawIndexed(m_num_indices, 0, 0); 繰り返します:データをGPUにアップロードするのは、頂点バッファーをマップ、memcpy、およびマップ解除するときですか、それともIASetVertexBuffersを呼び出すときにフレームごとにアップロードされますか?

2
どうすればOBJモデルを頂点とインデックスの配列に変換できますか?
モデルのロード方法を学ぶためだけに、単純なモデルローダーを作成しています。.OBJファイルをカスタム形式に変換するプログラムを作成しました。(それは事実上.OBJとまったく同じです、私は学習のためだけにもう一度書いた)。すべてのデータをに読み込むことはできますstd::vectorが、頂点とインデックスの配列にデータを配置する方法がわからないため、正しくレンダリングされません。カリングなしでワイヤーフレームを有効にした場合の結果は次のとおりです(球体であることが想定されており、中央のL形はモデルの一部ではありません)。 ポイントリストをレンダリングするように指示すると、すべての頂点が適切な場所にあります。ただし、顔が正しく形成されていないようです... これはそれらをレンダリングするコードです: //========================================================= // CONVERT THE DATA INTO SOMETHING USABLE //========================================================= bool isDuplicate; for(int i = 0; i < polygonCount; i++) { for(int i2 = 0; i2 < 3; i2++) { isDuplicate = false; isCreated = false; selectedVertex = faceDefinitions[i].vertexIndexes[i2]; for(int i3 = 0; i3 < vertexCount; i3++) { …
7 c++  models  directx11 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.