C# OpenTK(OpenGL)赢得';我画不出大多数原语

C# OpenTK(OpenGL)赢得';我画不出大多数原语,c#,.net,opengl,opentk,C#,.net,Opengl,Opentk,我最近开始用OpenTK做一个简单的C游戏# 然而,我似乎不能像点一样画出基本的形状。我尝试了很多东西,但我无法理解 我的绘图例程当前如下所示: public static void RenderLoop(object Sender, OpenTK.FrameEventArgs Fea) { OpenTK.Graphics.OpenGL.GL.Clear(OpenTK.Graphics.OpenGL.ClearBufferMask.ColorBufferBit | OpenTK.Grap

我最近开始用OpenTK做一个简单的C游戏# 然而,我似乎不能像点一样画出基本的形状。我尝试了很多东西,但我无法理解

我的绘图例程当前如下所示:

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;
        }
    }

我认为问题正如马库斯所暗示的那样;您没有将投影矩阵设置为任何有用的内容(也没有将modelview矩阵设置为任何内容)。如果保留为标识,(50,50)将位于视图窗口之外。我建议您查找glOrtho和glFrustum的OpenTK映射

假设您有一个按高度调整宽度的视口,下面将为您设置一个视口,其中(0,0)是左上角,(a,b)是右侧的a像素,从右侧开始是b像素:

glOrthof(0, width, height, 0, 1, 10);
虽然这会使近剪裁平面距离查看器的深度为1(远剪裁平面距离查看器的深度为10),但在初始化时,您可能也希望执行类似的操作:

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

将您在2d中指定的任何未来几何体移动到正好位于两个剪裁平面之间的中间位置。

投影矩阵和modelview矩阵设置的外观如何?(假设你有一个)@Marcus Lindblom我已经在我的帖子中添加了init代码,这就是一切。(我想要2D,我不打算使用任何3D功能)为什么启用纹理,但不传递任何纹理坐标?@genpfault这是一个错误,我已经解决了,但我仍然看不到屏幕上的任何点