2011-01-10 104 views
1

我最近開始在C#中使用OpenTK進行一個簡單的遊戲但是我似乎無法繪製像點這樣的基本形狀我嘗試了很多東西,但我可以不知道。OpenTK(OpenGL)不會繪製最原始的圖形

我的繪圖程序目前看起來是這樣的:

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

您的投影矩陣和模型視圖矩陣設置如何顯示? (假設你有一個) – Macke 2011-01-10 11:45:32

+0

@Marcus Lindblom我已經將init代碼添加到了我的帖子中,那就是一切。 (我想2D,我不打算使用任何3D功能) – Mervin 2011-01-10 13:03:09

回答

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中指定的未來幾何圖形轉換爲精確的hal在兩個剪輯平面之間飛行。