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

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

4
フルスクリーンクワッドでレンダーターゲットにピクセルパーフェクトレンダリング
一連の値をレンダーターゲットにレンダリングするときに問題が発生します。値が、希望する正確な範囲になることはありません。基本的に、フルスクリーンクワッドとピクセルシェーダーを使用してレンダーターゲットテクスチャにレンダリングし、テクスチャー座標をシェーダーでのいくつかの計算の基礎として使用するつもりです。左上隅の(0,0)から右下隅の(1,1)までのクワッド範囲のテクスチャ座標...問題は、補間後、これらの値がピクセルシェーダーに到達しないことです。 。 例: 4x4テクスチャにレンダリングし、この場合のシェーダーは、赤と緑のチャネルでテクスチャ座標(u、v)を出力するだけです。 return float4(texCoord.rg, 0, 1); そこから取り出したいのは、左上のピクセルがRGB(0,0,0)であり、したがって黒であるテクスチャであり、右上のピクセルがRGB(255,0,0)であり、したがって明るい赤と左下のピクセルはRGB(0,255,0)-明るい緑です。 しかし、代わりに私はこれをここの右側に取得します: (直線四角形レンダリング、補正なし) 左上のピクセルは黒ですが、他のコーナーでは比較的濃い赤と濃い緑しか表示されません。それらのRGB値は(191,0,0)と(0,191,0)です。私はそれがクワッドのサンプリング位置に関係していると強く思います:左上のピクセルはクワッドの左上隅を正しくサンプリングし、UV座標として(0,0)を取得しますが、他のコーナーのピクセルはクワッドの他のコーナー。左の画像でこれを示しました。四角形を表す青いボックスと、上部のサンプリング座標を表す白いドットです。 これで、Direct3D9で画面揃えのクワッドをレンダリングするときに座標に適用する必要があるハーフピクセルオフセットについて知っています。これからどのような結果が得られるか見てみましょう: (DX9のハーフピクセルオフセットでレンダリングされたクワッド) 赤と緑が明るくなりましたが、まだ正しくありません。赤または緑のカラーチャネルで取得できる最大値は223です。しかし今、私はもう純粋な黒すら持っていませんが、代わりにRGB(32,32,0)の暗い黄色がかった灰色です! 私が実際に必要とするのは、この種のレンダリングです。 (ターゲットレンダー、縮小されたクワッドサイズ) 最初の図と比較して、クワッドの右と下の境界線を1ピクセル上および左に移動する必要があるようです。次に、右側の列と一番下の行のピクセルはすべて、クワッドの境界から正しくUV座標を取得します。 VertexPositionTexture[] quad = new VertexPositionTexture[] { new VertexPositionTexture(new Vector3(-1.0f, 1.0f, 1f), new Vector2(0,0)), new VertexPositionTexture(new Vector3(1.0f - pixelSize.X, 1.0f, 1f), new Vector2(1,0)), new VertexPositionTexture(new Vector3(-1.0f, -1.0f + pixelSize.Y, 1f), new Vector2(0,1)), new …

4
2Dタイルベースのゲームで、スクロールに適した方法は何ですか?
D3DXSPRITEラッパーでDirect3Dを使用して、タイルを画面に描画しています。衝突やタイルタイプなどのメンバーを含むタイルクラスがあり、次にタイルの配列があります。 タイルグリッド[256] [256]; どちらがより良い方法でしょうか? -画面の中央にプレーヤーを描画し、マップが描画する場所をオフセットします。 ・以下のカメラでプレイヤーを移動します。 最初の方法を使用していましたが、マップの左上端に到達したとき、および他のプレイヤー/敵がマップ上にいて同時に移動しているときは、非常に複雑になります カメラをプレーヤーに追従させる場合、画面に収まる数が少ない場合でも、グリッドタイルごとにspriteBatch-> Draw(...)を呼び出す必要がありますか?
9 c++  directx  directx9 

2
Shader Model 3 / DX9にSSAOを実装する方法は?
SSAOに関する記事をいくつか読んだので、DX9の上で動作する職場の3Dエンジンに実装したいと思います。シェーダーモデル3を使用して可能な限り簡単な実装を実行するためのヒントを教えてください。また、ハロインのようなアーティファクトに取り組むために、この実装を時間をかけてどのようにアップグレードしますか?

1
C ++ / DirectX9で3人称カメラを実装する最も簡単な方法は何ですか
C ++とDirectX9は初めてなので、サードパーソンカメラを実装したいと思います。Quaternionベースのカメラについて読んだ後、私はそれを実装してみることにしました。しかし、それは本当に私の心を吹き飛ばすので、TPカメラを実装する最も簡単な方法は何ですか? カメラがすべきことは次のとおりです。 3DVector(x、y、z)に保存されている座標を追跡する オブジェクトを中心に回転(スムーズ) たぶんいくつかのタイプの「スプリング」=回転後、オブジェクトの後ろの通常の位置にゆっくりと戻ります 私の悪い英語をお詫び申し上げます:私はドイツ人で、まだ学校にいます! 前もって感謝します! 編集: いくつか試した後、私はそれを手に入れました。 私が検討した最大の問題は、ワールドマトリックスから「方向」ベクトルを正しく抽出することでした。 私の研究中に、私はほとんどこのようなものを見つけました: D3DXVECTOR3 direction; direction.x = worldMatrix->_13; direction.y = worldMatrix->_23; direction.z = worldMatrix->_33; D3DXVec3Normalize(&direction, &direction); それは私にはうまくいきません!代わりに私はこれをしました: D3DXVECTOR3 direction; direction.x = worldMatrix->_13; // Consider the .y after the .z! direction.z = worldMatrix->_23; direction.y = worldMatrix->_33; D3DXVec3Normalize(&direction, &direction); スケーリングの場合: // The tenfold …
8 c++  camera  directx9 

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
D3D9およびOpenGL頂点データ管理のためのより良い抽象化レイヤーとは何ですか?
私のレンダリングコードは常にOpenGLでした。OpenGLがないプラットフォームをサポートする必要があるため、OpenGLとDirect3D 9をラップする抽象化レイヤーを追加する必要があります。Direct3D11は後でサポートします。 TL; DR: OpenGLとDirect3Dの違いにより、プログラマーに冗長性が生じ、データレイアウトが不安定に感じられます。 今のところ、私のAPIは少しこのように動作します。これがシェーダーの作成方法です。 Shader *shader = Shader::Create( " ... GLSL vertex shader ... ", " ... GLSL pixel shader ... ", " ... HLSL vertex shader ... ", " ... HLSL pixel shader ... "); ShaderAttrib a1 = shader->GetAttribLocation("Point", VertexUsage::Position, 0); ShaderAttrib a2 = shader->GetAttribLocation("TexCoord", VertexUsage::TexCoord, 0); …

1
非表示のボーンの実装
突然、目に見えないオブジェクト/ボーンを実装する方法がまったくわからなくなったような気がします。 現在、ハードウェアインスタンスを使用して、すべてのボーンのワールドマトリックスを頂点バッファーに格納し、それらすべてをパイプラインに送信しています。しかし、錐台カリングを処理するとき、または他の理由でシミュレーションでそれらを非表示に設定すると、それらの一部がランダムに表示されなくなります。 これは、表示されているユニットのマトリックスのみを使用して、フレームごとに最初からバッファーを効率的に再充填する必要があることを意味しますか?これは、多くの無駄な帯域幅を必要とするように思えます。
8 directx9 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.