设置OpenGL摄像头

时间:2016-01-25 11:28:11

标签: c# opengl graphics 3d opentk

我在3D空间设置相机时遇到了问题。

这是我的代码:

private void SetupViewPort()
    {
        GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
        GL.MatrixMode(MatrixMode.Projection);
        GL.LoadIdentity();
        GL.Ortho(0, 1000,0,1000, 0, 1);

        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadIdentity();

        Vector3d eyePos = new Vector3d(0, 0, 1);
        Vector3d point = new Vector3d(500, 500, 0.01);
        Vector3d up = new Vector3d(0, 0 , 1);
        Matrix4d mat = Matrix4d.LookAt(eyePos, point, up);
        //mat.Invert();
        GL.LoadMatrix(ref mat);

    }

我期待看到我在2D平面上绘制的形状。但我每次都会看到一个空白的屏幕。

这是我绘制形状的代码:

private void glControl1_Paint(object sender, PaintEventArgs e)
    {
        if (!loaded)
            return;
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
        GL.Enable(EnableCap.DepthTest);
        GL.DepthMask(true);
        GL.ClearDepth(1.0);
        GL.Color3(Color.Yellow);
        GL.Begin(PrimitiveType.Triangles);

        GL.Vertex2(0, 0);
        GL.Vertex2(0, 600);
        GL.Vertex2(600, 600);
        GL.Vertex2(100, 100);
        GL.Vertex2(50, 70);
        GL.Vertex2(200, 100);

        GL.End();

        glControl1.SwapBuffers();
    }

1 个答案:

答案 0 :(得分:0)

正交投影矩阵和lookAt视图矩阵不能很好地一起使用。由于您正在绘制2D,因此只需将lookAt矩阵保留并使用单位矩阵。