0

私は c# で DirectX を初めて使用しますが、私を混乱させる質問があります。基本的に、画面に 2 つの立方体をレンダリングしたいのですが、1 つはカメラから近く、もう 1 つはカメラから遠く離れています。近いものは常に遠いものの前にありますが、実際には、レンダリング シーケンスに依存し、最後にレンダリングされたものは常に他のものの前にあります。Z バッファーをクリアしようとしましたが、それは機能しませんすべてなので、私が間違っていることがあるかどうか疑問に思っていますか?

ここに私のコードスニペットがあります

private void Form1_Load(object sender, EventArgs e)
    {
        PresentParameters presentParams = new PresentParameters();
        presentParams.Windowed = true;
        presentParams.SwapEffect = SwapEffect.Discard;
        presentParams.EnableAutoDepthStencil = true;
        presentParams.AutoDepthStencilFormat = DepthFormat.D16;

        device = new Device(0, DeviceType.Hardware, this, CreateFlags.MixedVertexProcessing, presentParams);
        device.VertexFormat = CustomVertex.PositionColored.Format;
        device.RenderState.CullMode = Cull.CounterClockwise;
        device.RenderState.Lighting = false;

        Matrix projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 0f, 10000.0f);
        device.Transform.Projection = projection;
    }

protected override void OnPaint(PaintEventArgs e)
    {
        Cube a = new Cube(new Vector3(0, 0, 0), 5);
        Cube b = new Cube(new Vector3(0, 0, 15), 5);
        device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkGray, 1, 0);
        device.BeginScene();
        Matrix viewMatrix = Matrix.LookAtLH(cameraPosition, targetPosition, up);
        device.Transform.View = viewMatrix;
        device.DrawIndexedUserPrimitives(PrimitiveType.TriangleList, 0, 8, 12, a.IndexData, false, a.GetVertices());
        device.DrawIndexedUserPrimitives(PrimitiveType.TriangleList, 0, 8, 12, b.IndexData, false, b.GetVertices());
        device.EndScene();
        device.Present();
    }
4

1 に答える 1

0

わかりました、私は最終的に問題を修正しました

Matrix projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 0f, 10000.0f);

Matrix projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 10000.0f);

しかし、私はその理由を知りません、そしてなぜそれが起こるのか、誰もそれを知っていますか?

于 2015-06-04T05:05:24.457 に答える