1

我最近开始在 C# 中使用 OpenTK 进行一个简单的游戏但是我似乎无法绘制基本形状,比如我尝试了很多东西但我无法弄清楚的点。

我的绘图程序目前看起来像这样:

public static void RenderLoop(object Sender, OpenTK.FrameEventArgs Fea)
{
    OpenTK.Graphics.OpenGL.GL.Clear(OpenTK.Graphics.OpenGL.ClearBufferMask.ColorBufferBit | OpenTK.Graphics.OpenGL.ClearBufferMask.DepthBufferBit);

    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.PointSmooth);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.Blend);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.DepthTest);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.CullFace);

    OpenTK.Graphics.OpenGL.GL.Begin(OpenTK.Graphics.OpenGL.BeginMode.Points);
    OpenTK.Graphics.OpenGL.GL.Color3(1f, 1f, 1f);
    OpenTK.Graphics.OpenGL.GL.Vertex2(50, 50);
    OpenTK.Graphics.OpenGL.GL.End();


    OpenTK.Graphics.GraphicsContext.CurrentContext.SwapBuffers();
}

初始化是这样的:

    public static bool Init()
    {
        try
        {
            //1200,850

            GameWnd = new GameWindow(1200, 850, new GraphicsMode(new ColorFormat(32), 0), "OpenTK - OpenGL Renderer", GameWindowFlags.Default, DisplayDevice.Default,3,0,GraphicsContextFlags.Default);

            GL.Disable(EnableCap.DepthTest); //Disable Z-Buffer, 2D Rendering
            GL.Disable(EnableCap.CullFace);
            GL.Enable(EnableCap.Texture2D);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);
            GL.RenderMode(RenderingMode.Render);

            GL.MatrixMode(MatrixMode.Projection);

            return true;
        }
        catch (Exception ex)
        {
            ErrorHandler.Err(ex, "Renderer has failed to initialize");
            return false;
        }
    }
4

1 回答 1

2

我认为问题正如马库斯所暗示的那样;您没有将投影矩阵设置为任何有用的东西(并且根本没有将模型视图矩阵设置为任何东西)。如果保留为标识,则 (50, 50) 将在视图窗口之外。我建议您查看 glOrtho 和 glFrustum 的 OpenTK 映射。

假设您有一个宽乘高大小的视口,以下将为您设置一个视口,其中 (0, 0) 是左上角, (a, b) 是右边的一个像素,从那里向下是 b 个像素:

glOrthof(0, width, height, 0, 1, 10);

虽然这将近剪辑平面置于距观察者 1 的深度(远在 10 的深度),但您可能还希望在初始化时执行以下操作:

glMatrixMode(GL_MODELVIEW);
glTranslatef(0.0f, 0.0f, -5.5f);

将您在 2d 中指定的任何未来几何图形移动到两个剪切平面之间的正中间。

于 2011-01-10T16:18:47.420 回答