开发者

OpenTK (OpenGL) won't draw most primitives

I've recently started using OpenTK for a simple game in C# However I can't seem to draw basic shapes like points i've tried a lot of things but i can't figure it out.

My drawing routine currently looks like this:

public static void RenderLoop(object Sender, OpenTK.FrameEventArgs Fea)
{
    OpenTK.Graphics.OpenGL.GL.Clear(OpenTK.Graphics.OpenGL.ClearBufferMask.ColorBufferBit | OpenTK.Graphics.Ope开发者_Go百科nGL.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();
}

And the initialization is this:

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


I think the problem is as Marcus implies; you're not setting up the projection matrix to anything useful (and not setting up the modelview matrix to anything at all). If left as the identity, (50, 50) will be outside of the view window. I suggest you look up the OpenTK mappings of glOrtho and glFrustum.

Supposing you have a width by height sized viewport, the following would set you up with a viewport where (0, 0) is the top left and (a, b) is a pixels to the right and b pixels down from there:

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

Though that puts the near clip plane at a depth of 1 from the viewer (and the far at a depth of 10), so you'd probably also want to do something like this at initialisation:

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

To shift any future geometry that you specify in 2d to being exactly halfway between the two clip planes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜