我的Direct3D场景更新无效。我错过了什么?

时间:2014-03-28 01:51:53

标签: c# winforms directx

我有一个winform,并在其上设置direct3d以显示蓝屏。 Render正在运行每一帧。 以下(以及上面的一些顶点声明)向屏幕输出一个三角形..到目前为止都很酷。

    public void UpdateScene()
    {
        Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
        Matrix matrix = new Matrix();
        matrix.Translate(translation);
        device.Transform.World = matrix;
    }


    public void Render()
    {
        if (device == null)
            return;

        //Clear the backbuffer to a blue color 
        device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
        //Begin the scene
        UpdateScene();
        device.BeginScene();

        // Rendering of scene objects can happen here
        device.SetStreamSource(0, vertexBuffer, 0);
        device.VertexFormat = CustomVertex.TransformedColored.Format;
        device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);


        //End the scene
        device.EndScene();
        device.Present();
    }

cameraPosition.X Y和Z在每次传球时都正确更新...为什么我的物体看起来不会前后移动(或者更多的是相机在它周围移动)?

还试过这个:

Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
device.Transform.World.Translate(translation);

和此:

Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
device.Transform.World = Matrix.Translation(translation);

我认为相关的代码: http://pastebin.com/rgfJGxk0

1 个答案:

答案 0 :(得分:-1)

您最好不要使用相机将三角形转换为相同的位置。 Direct3D变换和投影算法基于现实世界的例子,就像用相机拍摄图像一样。所以想象一下,如果你把东西放在相机的同一个位置,你能抓住它吗?你需要一些距离。