DirectX 9では、どのように適切に仕事にZバッファを取得するには?
質問
私が正しく表示するためにオンに陰影付きでシンプルな立方体の形状を得ることで成功してきます。
これは、C#コードであるが、値は、直接C ++コードにSlimDXを通過している。
pParams.BackBufferWidth = 0;
pParams.BackBufferHeight = 0;
pParams.BackBufferCount = 1;
pParams.BackBufferFormat = Format::X8R8G8B8;
pParams.Multisample = MultisampleType::None;
pParams.MultisampleQuality = 0;
pParams.DeviceWindowHandle = this.Handle;
pParams.Windowed = true;
pParams.AutoDepthStencilFormat = Format.D24X8;
pParams.EnableAutoDepthStencil = true;
pParams.PresentFlags = PresentFlags.None;
pParams.FullScreenRefreshRateInHertz = 0;
pParams.PresentationInterval = PresentInterval.Immediate;
pParams.SwapEffect = SwapEffect.Discard;
... PresentParameterの値は私のDirect3D9Deviceオブジェクトを設定するために使用STRUCTされます。
次のようにレンダリング時には、SetRenderStateが呼び出されます:
this.D3DDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, this.BackColor, 10000.0f, 0);
this.D3DDevice.SetRenderState(RenderState.Ambient, false);
this.D3DDevice.SetRenderState(RenderState.ZEnable, ZBufferType.UseZBuffer);
this.D3DDevice.SetRenderState(RenderState.ZWriteEnable, true);
this.D3DDevice.SetRenderState(RenderState.ZFunc, Compare.LessEqual);
this.D3DDevice.BeginScene();
は再び、これは、C ++プログラマが恐れないコールへの値をマーシャリングC ++コードに渡されます。
プリミティブはびまん頂点(| D3DFVF_DIFFUSE D3DFVF_XYZ)に着色されています。ワイヤフレームビューは次のようになります。 ワイヤーフレームhttp://gallery.me.com/robertを表示します。パーキンス/ 100045 / Z-fightingwireframe / web.jpg の
より大きな三角形の近い対が立方体の近くの面である。
このような満たされたビューになります。 フルビュー1 http://gallery.me.com/robert .perkins / 100045 / Z-戦っ/ web.jpgする
またはこの、その後のレンダリング呼び出しで: 丸見え2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpgする
私はこの問題を解決するかどうかはわかりません。私はどこを探し始めるべき?
編集:フレームのうちの1つは、このようなカメラについては、射影行列ルックス
{[[M11:0.6281456 M12:0.7659309 M13:0.1370506 M14:0]
[M21:0.7705086 M22:-0.5877584 M23:-0.2466911 M24:0]
[M31:-0.1083957 M32:0.2605566 M33:-0.9593542 M34:0]
[M41:-3.225646 M42:-1.096823 M43:20.91392 M44:1]]}
そして、このようなビュー行列ルックスます:
camera.ViewMatrix = {[[M11:0.6281456 M12:0.7659309 M13:0.1370506 M14:0]
[M21:0.7705086 M22:-0.5877584 M23:-0.2466911 M24:0]
[M31:-0.1083957 M32:0.2605566 M33:-0.9593542 M34:0]
[M41:-3.225646 M42:-1.096823 M43:20.91392 M44:1]]}
解決
クリア1.0Fない10000.0fにZバッファ
SDKをクリアドキュメントから
[in] Clear the depth buffer to this new z value which ranges from 0 to 1..
また、あなたの射影行列とビューポートの設定...
を参照することが有用であり得ます編集:どのようにあなたがその投影行列を構築するのですか?あなたは1トライ1000.0fに0.001fとzFarにあなたのzNearを設定し、それがすべてであなたを助けかどうかに0とzFarにzNearを設定している...
他のヒント
A予感:あなたがクリアする前に、Zバッファを有効にしてください。