Нанесите Shader на поверхность (текстура)

Я работаю над небольшой библиотекой 2D-графики на основе OpenTK и пытаюсь применить шейдер к объекту Surface:

public void ApplyTo(Surface surface)
    {
        using (Surface pong = new Surface())
        {
            pong.Create(surface.Width, surface.Height);
            pong.Clear(0, 0, 0, 0);

            GL.Viewport(0, 0, surface.Width, surface.Height);
            GL.LoadIdentity();
            GL.Ortho(0, 1.0, 1.0, 0.0, 0.0, 4.0);

            GL.UseProgram(0);
            surface.BindTexture();
            pong.BindFramebuffer();


            GL.Begin(PrimitiveType.Quads);
            GL.TexCoord2(0.0f, 1.0f);
            GL.Vertex3(0, 0, 0);
            GL.TexCoord2(0.0f, 0.0f);
            GL.Vertex3(0, 1, 0);
            GL.TexCoord2(1.0f, 0.0f);
            GL.Vertex3(1, 1, 0);
            GL.TexCoord2(1.0f, 1.0f);
            GL.Vertex3(1, 0, 0);
            GL.End();

            Use(); // calls GL.UseProgram()
            pong.BindTexture();
            surface.BindFramebuffer();

            GL.Begin(PrimitiveType.Quads);
            GL.TexCoord2(0.0f, 1.0f);
            GL.Vertex3(0, 0, 0);
            GL.TexCoord2(0.0f, 0.0f);
            GL.Vertex3(0, 1, 0);
            GL.TexCoord2(1.0f, 0.0f);
            GL.Vertex3(1, 1, 0);
            GL.TexCoord2(1.0f, 1.0f);
            GL.Vertex3(1, 0, 0);
            GL.End();

            GL.BindTexture(TextureTarget.Texture2D, 0);
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
    }

Это как-то очищает поверхность вместо применения шейдера. Я подозреваю, что я делаю что-то не так с окном просмотра / проекции, но что? Надеюсь, предоставленного кода достаточно.

1 ответ

Для полноэкранного рендеринга на четырехугольнике я использую эту проекцию:

OpenTK.Matrix4 ortho = OpenTK.Matrix4.CreateOrthographicOffCenter(-1, 1, -1, 1, 1, -1);

Где-то есть деление на 0, когда ваши вершины находятся точно в ближней плоскости, вы также можете двигаться немного дальше по оси z.

Другие вопросы по тегам