2011-01-10 3 views
1

Я недавно начал использовать OpenTK для простой игры на C# Однако я не могу рисовать основные фигуры, такие как точки, которые я пробовал много чего, но могу Не понимаю.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

+0

@Marcus Lindblom Я добавил код инициализации к своему сообщению, то есть все. (Я хочу, чтобы 2D я не собирался использовать какие-либо 3D-возможности) – Mervin

+0

Почему вы разрешаете текстурирование, но не передаете какие-либо текстурные координаты? – genpfault

ответ

2

Я думаю, что проблема в том, как следует Маркус; вы не настраиваете матрицу проекций на что-нибудь полезное (и не настраиваете матрицу вида для просмотра вообще). Если оставить в качестве тождества, (50, 50) будет находиться вне окна просмотра. Я предлагаю вам взглянуть на отображения OpenTK glOrtho и glFrustum.

Предположим, что у вас есть ширина по вертикали, в следующем окне будет отображаться окно просмотра, где (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 между двумя плоскостями клипа.

+0

Теперь она работает, спасибо за помощь! – Mervin