Текстура OpenTK OpenGL не отрисовывается

У меня возникают проблемы с рисованием текстуры на моем квадроцикле, но она остается белой. Я просмотрел несколько руководств и, кажется, не делаю ничего, кроме них.

Чтобы загрузить текстуру:

        Bitmap bitmap = new Bitmap("Textures/Sprite_Can.png");

        GL.GenTextures(1, out textureID);
        GL.BindTexture(TextureTarget.Texture2D, textureID);

        BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
            ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
            OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
        bitmap.UnlockBits(data);


        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);

Настройте и примените ортогональную проекцию:

        GL.MatrixMode(MatrixMode.Projection);

        GL.LoadIdentity();

        GL.Ortho(0, control.Width, 0, control.Height, -1, 1);
        GL.Viewport(0, 0, control.Width, control.Height);  

        GL.MatrixMode(MatrixMode.Modelview);

        GL.LoadIdentity();

        GL.ClearColor(Color4.CornflowerBlue);

И наконец розыгрыш:

        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);


        GL.LoadIdentity();

        GL.Translate(30, 30, 0);
        GL.BindTexture(TextureTarget.Texture2D, textureID);

        GL.Begin(BeginMode.Quads);
        GL.TexCoord2(0, 0);
        GL.Vertex2(-1 * width / 2, 1 * height / 2);

        GL.TexCoord2(1, 0);
        GL.Vertex2(1 * width / 2, 1 * height / 2);

        GL.TexCoord2(1, 1);
        GL.Vertex2(1 * width / 2, -1 * height / 2);

        GL.TexCoord2(0, 1);
        GL.Vertex2(-1 * width / 2, -1 * height / 2);
        GL.End();

        GL.Flush();
        control.SwapBuffers();

В общем, четверка тянет просто отлично. Однако текстура не отображается. В результате у меня остался только белый квадрат.


person Serguei Fedorov    schedule 02.09.2013    source источник


Ответы (1)


В конвейере OpenGL с фиксированной функцией вы также должны Enable текстурных блоков, прежде чем текстура, привязанная к одному из них, будет применена ко всему, что вы рисуете.

Обычная привязка OpenGL API для этого - glEnable (GL_TEXTURE_2D). Эквивалент OpenTK: GL.Enable (EnableCap.Texture2D).

person Andon M. Coleman    schedule 02.09.2013
comment
Спасибо, да, вы правы. Почесал в затылке, пытаясь понять, работает ли мой импорт или рисование некорректно. Спасибо! - person Serguei Fedorov; 03.09.2013