1

平行六面体ブレンド コンテナー内にいくつかの 3D オブジェクトを表示しようとしています。得られた結果は不十分です。

最初の図は正しいようです https://picasaweb.google.com/lh/photo/QabTkrf2zyIMP0UEuZvmTdMTjNZETYmyPJy0liipFm0?feat=directlink

そして2番目は間違ってい ます https://picasaweb.google.com/lh/photo/JqnZqeTuomNLqDR5vhizadMTjNZETYmyPJy0liipFm0?feat=directlink

C# でマネージド directx を使用しています

初期化:

DxDeviceArea.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, 1.0f, 1.0f, MaxSizeArea * 2);
DxDeviceArea.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, MaxSizeArea / 2f), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
DxDeviceArea.RenderState.Lighting = true;
DxDeviceArea.RenderState.CullMode = Cull.CounterClockwise;
DxDeviceArea.RenderState.SourceBlend = Blend.SourceAlpha;
DxDeviceArea.RenderState.DestinationBlend = Blend.InvSourceAlpha;
DxDeviceArea.RenderState.AlphaBlendEnable = true;
DxDeviceArea.RenderState.BlendOperation = BlendOperation.Add;
DxDeviceArea.RenderState.AlphaTestEnable = true;
//Set light
DxDeviceArea.Lights[0].Type = LightType.Directional;
DxDeviceArea.Lights[0].Diffuse = Color.White;
DxDeviceArea.Lights[0].Direction = new Vector3(0, 0, -1);
DxDeviceArea.Lights[0].Enabled = true;

レンダリング関数では、最初のステップはオブジェクト内の描画であり、2 番目のステップはブレンド ボーダーの描画です。

2 番目に描画する前に、cullmode を CounterClockwise から None に切り替えます

DxDeviceArea.RenderState.CullMode = Cull.None;

回転

//rotation
DxDeviceArea.Transform.World *= Matrix.RotationY((-PosX / 300F)) * Matrix.RotationX(PosY / 300F);

示された問題をどのように打ち負かすことができますか?

4

1 に答える 1

0

透明なサーフェスを正しく描画するには、それらを深さでソートし、後ろから前にレンダリングする必要があります。また、透明なオブジェクトをレンダリングしている間は、z バッファ テストを無効にする必要があります。

于 2012-05-16T14:40:34.813 に答える