OpenTK (OpenGL) не будет рисовать большинство примитивов - PullRequest
1 голос
/ 10 января 2011

Я недавно начал использовать 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;
        }
    }

1 Ответ

2 голосов
/ 10 января 2011

Я думаю, что проблема в том, что подразумевает Маркус;Вы не настраиваете матрицу проекции на что-либо полезное (и вообще не настраиваете матрицу просмотра модели).Если оставить это как идентификатор, (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, на ровно посередине между двумя плоскостями отсечения.

...