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

DirectXは、主にゲーム開発者を対象としたMicrosoftのマルチメディアAPIのセットです。DirectXコレクション内の人気のあるAPIには、Direct3D、XInput、およびXAudioが含まれます。

4
D3DXSaveSurfaceToFileを使用せずに、DirectX 9の画面をメモリの未加工ビットマップにキャプチャする方法
OpenGLでこのようなことができることを知っています glReadBuffer( GL_FRONT ); glReadPixels( 0, 0, _width, _height, GL_RGB, GL_UNSIGNED_BYTE, _buffer ); そして、かなり高速です。_bufferに生のビットマップを取得します。DirectXでこれを実行しようとすると、D3DDeviceオブジェクトがあると仮定すると、次のようなことができます if (SUCCEEDED(D3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackbuffer))) { HResult hr = D3DXSaveSurfaceToFileA(filename, D3DXIFF_BMP, pBackbuffer, NULL, NULL); しかし、D3DXSaveSurfaceToFileはかなり遅く、キャプチャをディスクに書き込む必要がないので、これを行うためのより高速な方法があるかどうか疑問に思っていました。 編集:私はDirectXアプリケーションのみを対象としています。実際にはDX9アプリ。私はプレゼントへのフックを介してこれを行っています。(必要に応じて迂回を使用しています)、すべてのフレームでこれを実行しています。BMP PNG JPEGなどの特定のビットマップ形式は必要ありません(または必要ありません)。RGB24の色空間は問題ありません。YUV480pとして取得する方が良いでしょうが、絶対に必要というわけではありません。非常に役立つ回答をありがとうございました

3
高さマップと3Dモデルメッシュ
私は現在3D PCゲーム(C ++およびDirectX 9.0で作成)に取り組んでおり、レベルデータをメモリに格納するための最良の方法を見つけようとしています。 ゲームのアクションは地面の下で行われるため、常にプレーヤーの上に天井があります。地面はかなりでこぼこで、石筍のようなものが常に存在しています。レベルは小さめで、ほとんどが廊下のように見えます。これまでに見つけたオプションは次のとおりです。 ハードドライブにビットマップまたはバイナリ/テキストファイルとして保存されている2つの高さマップ。天井(上部)と地面の高さマップ。 または いくつかの3Dモデル形式(たとえば、.fbx、.x、.objなど)の単一の3Dメッシュ。 レベルのデータストレージにどのようにアプローチすればよいですか?パフォーマンスに関して言えば、私の最善の選択肢は何でしょうか?高さマップを介してロードされたレベルのテクスチャリングに関しても問題があります。3Dモデルを使用すると、テクスチャリングが簡単になります。 ありがとう!

1
多くの種類のプリミティブを描画できるレンダラーを実装するにはどうすればよいですか?
これは、インデックス付きプリミティブの描画に関して以前に私が尋ねた質問にいくぶん関連しています。 私の問題は、たくさんを描きたかったのに、1つの立方体しか描いていなかったことです。問題は、それぞれの新しいインスタンス化で頂点バッファーとインデックスバッファーを上書きするCubeことであり、代わりに原点に1つ作成してから多数を描画し、変換マトリックスを介してシェーダーに渡し、異なるように見えるようにする必要があるということです。場所。これは美しく機能しました。 しかし、今は新しい問題があります。どのようにして多くの異なるタイプのプリミティブを描画するのでしょうか。 これが前の質問からの私のコードです: Cube::Cube(D3DXCOLOR colour, D3DXVECTOR3 min, D3DXVECTOR3 max) { // create eight vertices to represent the corners of the cube VERTEX OurVertices[] = { {D3DXVECTOR3(min.x, max.y, max.z), colour}, {D3DXVECTOR3(min.x, max.y, min.z), colour}, {D3DXVECTOR3(min.x, min.y, max.z), colour}, {min, colour}, {max, colour}, {D3DXVECTOR3(max.x, max.y, min.z), colour}, {D3DXVECTOR3(max.x, min.y, max.z), colour}, …

2
Openglでオブジェクトの周りに輪郭を描く
3D空間で2Dオブジェクトの周りに輪郭を描く必要があります。オブジェクトの周りに線を引いてみましたが(ギャップを埋めるためのポイント)、線の幅のため、その一部(〜50%)がオブジェクトを覆っていました。この問題を解消するためにステンシルバッファーを使用しようとしましたが、次のようになりました(輪郭は緑です)。 http://goo.gl/OI5uc(評判のため、画像を投稿できません) 線の一部がオブジェクトの背後にあり、一部が上にあることが(矢印が指しているところ)わかります。これはカメラを動かすと変化しますが、常にそれを覆っている部分があります。これが、オブジェクトの描画に使用するコードです。 glColorMask(1,1,1,1); std::list<CObjectOnScene*>::iterator objIter=ptr->objects.begin(),objEnd=ptr->objects.end(); int countStencilBit=1; while(objIter!=objEnd) { glColorMask(1,1,1,1); glStencilFunc(GL_ALWAYS,countStencilBit,countStencilBit); glStencilOp(GL_REPLACE,GL_KEEP,GL_REPLACE ); (*objIter)->DrawYourVertices(); glStencilFunc(GL_NOTEQUAL,countStencilBit,countStencilBit); glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE); (*objIter)->DrawYourBorder(); ++objIter; ++countStencilBit; } 私はステンシルバッファーのさまざまな設定を試しましたが、常にそのようなsthを取得していました。ここに質問があります: 1.ステンシルバッファを間違って設定していますか? 2.そのようなオブジェクトに輪郭を作成する他の簡単な方法はありますか? 前もって感謝します。 編集: 1.オブジェクトの法線がありません。 2.物体は凹面である可能性があります。 3.シェーダーを使用できません(以下の理由を参照してください)。


6
3Dレンダリングコンポーネントの抽象化のレベルは正しいですか?
私はこの領域の周りにたくさんの質問を見てきましたが、この正確な質問ではないので、これが重複している場合はお詫びします。 小さな3Dゲームを作っています。正直なところ、それはほんの少しの趣味のプロジェクトであり、実際のゲームにはならない可能性があります。素敵なグラフィックデモを作成し、3DレンダリングとC ++デザインについて学びたいと思います。 私の意図は、レンダリングにdirect3d9を使用することです。これについては少し経験があり、私の要件を満たしているようです。ただし、プログラマーとして1つのことを学んだ場合は、「このコンポーネントが別の実装に置き換えられる可能性があると考えられる理由はありますか」と答えます。答えが「はい」の場合、適切な抽象化とそのコンポーネントへのインターフェイスを設計する必要があります。 。そのため、d3d9を実装するつもりでも、d3d11、openglに実装できる3dインターフェイスを設計する必要があります... 私の質問は、これを行うのに最適なレベルは何ですか?作成して後で描画できるインターフェースだと思います 頂点バッファーとインデックスバッファー テクスチャー 頂点とピクセルの「シェーダー」 描画状態のいくつかの表現(ブレンドモードなど...) 言い換えれば、たとえばアニメーションモデルを描画するためのコードが、抽象頂点バッファーなどを取得するためにインターフェイスを使用するかなり低レベルのインターフェイスです。低すぎるので、必要なすべての機能を抽象化できないのではないかと心配しています。 別の方法は、インターフェイスがオブジェクト、アニメーション、風景などを描画し、各システムに実装できる、より高いレベルでこれを行うことです。これはもっと手間がかかっているように見えますが、私はもっと柔軟だと思います。 だから、それが私の質問です。描画システムを抽象化するとき、どのレベルのインターフェイスが最適ですか。
8 c++  opengl  directx 

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を呼び出すときにフレームごとにアップロードされますか?

3
.Xを編集するためのツール
これはおそらく私がこれで助けを求めようとする膨大な数の場所ですので、ローカル検索エンジンで何かを見逃した場合はご遠慮ください-短い答えが必要です:短い提案です。私は.Xファイルを使用しようとしています(おっと..ええと?笑)。しかし、.Xファイルをインポートして編集し、エクスポートするための適切なソフトウェアが見つかりませんでした。これはすべてアニメーション付きで、すべてテキスト形式(オプションですが、 1つの.Xファイルに複数のメッシュが含まれているため、これらすべてが素晴らしいでしょう。仕事の半分を行うための優れたソフトウェアを見つけましたが、1つのステップでそれを行う方法はありますか?(つまり、他のプログラマーは何を使っているのでしょうか?ネット上で良いものを見つけられませんでした。自分で実装するのでしょうか?) したがって、適切な提案があれば、ガベージなしですばらしいでしょう。テキストの.Xファイルと、インポートして編集してからエクスポートする複数のメッシュを含むアニメーション。 ありがとう:Péter 編集:私はすでにBlenderを試しました。2.49bは、テキストでインポートDirectXをサポートする最後のバージョンでした。これらのバージョンの後で、blenderは.xさえインポートせず、エクスポートのみを行います。2.49bはアニメーション.xをエクスポートできますが、アニメーションはインポートできません。2.49bは複数のメッシュをエクスポートできますが、インポートされるのは同じメッシュから1つのメッシュのみです(変更されていません)。提案に感謝しますが、動作するスクリプトも提案できない限り、blenderはこれに対する解決策ではありませんか? 解決策:上記の問題に対して、いくつかの解決策がありました。ここで私はものを要約しようとします: ブレンダーは部分的に機能するソリューションです。上記の編集を参照してください。 Milkshapeはdirectxファイルで動作するように見えましたが、私のテストでは、プレビューのみが適切に機能し、メイン画面ではテクスチャが不良であり、アニメーションがインポートされなかったことがわかりました。チェックされたバージョンは次のとおりです:1.7.0および1.8.4またはそのようなもの、私は覚えていません。 TrueSpaceはどの.Xファイルでも機能しないようです。なぜだかわかりません。DirectX SDKが提供するtiny.xで試してみましたが、違います。*-良い解決策はクイックコンバーターを使用することです-良い答えとしてマークされた以下のポストを参照してください。それが私の目標に最も近いので、これで問題ありません。 より多くのメッシュと複数のアニメーションを備えた.Xを適切にロードするプログラム(UU3D -Ultimate Unwrap 3D)が見つかり、テクスチャも問題ありません。それは無料ではないので、テキストで保存することもできれば、試すことができませんでした(保存はデモでは無効になっています)。そんな余裕がある人たちには、有望そうなのでお勧めしました。
7 directx 

2
滑らかな地形レンダリング
Direct3Dで滑らかな地形をレンダリングしようとしています。すべてのy値が0の50 * 50グリッドと、グリッド上の位置と「谷」または「丘」の深さまたは高さを示す一連の3Dポイントがあります。各3Dポイントにどれだけ近いかによって、グリッドの頂点のy値を高くしたり低くしたりする必要があります。したがって、最終的にはスムーズなテレインレンダラーが必要です。 どうすればいいのかよくわかりません。次の基本的な式を使用して、各ポイントまでの距離に基づいて頂点の高さを変更してみました。 dist = sqrt(a² + b² + c²) ここで、a、b、cは、頂点から3D点までのx、y、z距離です。私がこれで得た結果はまったくスムーズではありません。 おそらくもっと良い方法があると思います。 ここに私が今持っているもののスクリーンショットがあります:https : //dl.dropbox.com/u/2562049/terrain.jpg

2
ポイントライトソフトシャドウ
全方向性(ポイント)ライトにソフトシャドウを実装する方法。典型的なシャドウマッピングテクニックを使用します。深度はテクスチャキューブにレンダリングされ、追加は非常に簡単です。ライトからフラグメントのワールド位置までのベクトルを使用するだけです。それは完全に動作します。ソフトシャドウが必要になるまで。私たちのエンジンでは、スポットライトにPCSS技術を使用しています。しかし、ポイントライトの場合は問題が発生します。 3Dでサンプリングする方法は? 方向とアップベクター(0,1,0)から正規直交基底を作成する手法を開発しました。次に、サンプリングベクトル(この(1.0、i / depthMapSize、j / depthMapSize)のようなもの)にこの基準を乗算します。ただし、これは(もちろん:))(0,1,0)と(0、- 1,0)。 私はこれについてどんな助けにも感謝します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.