そのバックフェースカリングは、Zバッファリングがオンになっている、オフ、グーローシェーディング作品、三角形メッシュのための法線データなしので、どのように私は、DirectX 9を設定するのですか?
質問
はI頂点レベルのグローシェーディングとZバッファの使用の両方が存在することができるように、困難PresentParametersおよびDirectXデバイスの正しいパラメータを識別するを有するされてきました。いくつかの三角形メッシュの作業罰金、他の人が近づい・ツー・カメラある三角形の前に現れた背景三角形を持っています。
この例は、ここで発見された: http://gallery.me.com /robert.perkins/100045/zBufferGoneする。入力されたデータは、面の頂点の単純なリストです。各ファセットの頂点の巻き付け順序は非決定的である(様々なCADソフトウェアエクスポート機能から来る)とNO法線データが存在しません。
PresentParametersは今、次のように設定されています。私は、これは代わりにCのC#で実現++が、私はそれは、記述十分だと思うし、パラメータはC ++コードに通過します。これは、画像内の画像を生成します。動作はリファレンスデバイスで同じである。
pParams = new PresentParameters()
{
BackBufferWidth = this.ClientSize.Width,
BackBufferHeight = this.ClientSize.Height,
AutoDepthStencilFormat = Format.D16,
EnableAutoDepthStencil = true,
SwapEffect = SwapEffect.Discard,
Windowed = true
};
_engineDX9 = new EngineDX9(this, SlimDX.Direct3D9.DeviceType.Hardware, SlimDX.Direct3D9.CreateFlags.SoftwareVertexProcessing, pParams);
_engineDX9.DefaultCamera.NearPlane = 0;
_engineDX9.DefaultCamera.FarPlane = 10;
_engineDX9.D3DDevice.SetRenderState(RenderState.Ambient, false);
_engineDX9.D3DDevice.SetRenderState(RenderState.ZEnable, ZBufferType.UseZBuffer);
_engineDX9.D3DDevice.SetRenderState(RenderState.ZWriteEnable, true);
_engineDX9.D3DDevice.SetRenderState(RenderState.ZFunc, Compare.Always);
_engineDX9.BackColor = Color.White;
_engineDX9.FillMode = FillMode.Solid;
_engineDX9.CullMode = Cull.None;
_engineDX9.DefaultCamera.AspectRatio = (float)this.Width / this.Height;
私の他の設定の試みのすべては、偶数基準デバイス上に、COMエラーコードを返す({「D3DERR_INVALIDCALL:無効コール(-2005530516)」})。正しいセットアップパラメータは何ですか?
編集:C ++クラスこれは、このようなDirectX9のセットのデフォルト値を持つインターフェイス
PresentParameters::PresentParameters()
{
BackBufferWidth = 640;
BackBufferHeight = 480;
BackBufferFormat = Format::X8R8G8B8;
BackBufferCount = 1;
Multisample = MultisampleType::None;
MultisampleQuality = 0;
SwapEffect = SlimDX::Direct3D9::SwapEffect::Discard;
DeviceWindowHandle = IntPtr::Zero;
Windowed = true;
EnableAutoDepthStencil = true;
AutoDepthStencilFormat = Format::D24X8;
PresentFlags = SlimDX::Direct3D9::PresentFlags::None;
FullScreenRefreshRateInHertz = 0;
PresentationInterval = PresentInterval::Immediate;
}
解決
ここでは、無効なコールを返すのですか?
編集:私は、新しいEngineDX9呼び出しで想定していますか?あなたが現在のパラメータで、デバイスウィンドウハンドルを設定しようとしたことがありますか?
編集2:?あなたはそれがエラーが何であるかがわかりますかどうかを確認するためにDirectXのコントロールパネルでのデバッグスピューをオンにしている。
EDIT3:あなたは0にbackbufferWidthと高さを設定しようとしましたか? backbuffercountセットはには何ですか?また、バックバッファの「Format.D24S8」を試してみる価値があるかもしれませんか?その「可能性」グラフィックスカードは、16ビット(そういえ)をサポートしていません。あなたが作成しようとしているモードが有効であることをキャップでチェックしましたか?私はあなたが自動的に使用されているCLR言語を使用すると、0に設定されていないパラメータを設定することを、ところで、asssume?私、個人的には、常にこのような場合には、明示的なことを好む....
なぜならイムネイティブC ++ DX9コーダないCLR SlimDXコーダ...このPS私はここで推測しています
Edit4:私は確信してウィンドウハンドルの欠如だ...私はおそらく間違っているが、私はあなたのセットアップには本当に間違って見ることができる唯一のthats。ウィンドウDX9デバイスは、ウィンドウが必要です。ところで0に設定された幅と高さはあまりにものあなたは、デバイスを設定しているウィンドウを使用するには大き...
編集5:私は本当にここに間違ったルートをダウン見出してきました。あなたの「間違った」デバイスを作製した素子の作成と何も間違っているがあります。彼らは罰金である本パラメータを台無しにしないでください。あなたはZバッファリングに問題があるでしょう主な理由は、あなたがいつもと比較機能を設定することです。かかわらず、zバッファが含まれているものの、ピクセルをPASと、すでにそこにあるものは何でもzバッファの上書きにそのZを書き込み、この手段。私は賭けが、その中にあなたのZバッファリング問題があると思います。