Проблема с отображением текстуры Tao-framework/OpenGl

Я использую Tao Framework для работы с OpenGl. Я пытаюсь загрузить текстуру и показать ее в форме. Кажется, что изображение загружено правильно (сгенерирован идентификатор текстуры и ошибок нет), но он отображается неправильно.

Вот мой код для загрузки текстуры

public static class TextureManager
{
    static TextureManager()
    {
        Il.ilInit();
        Il.ilEnable(Il.IL_ORIGIN_SET);
    }

    public static int LoadTexture(string url)
    {
        int texObject = -1; 

        int imageId;
        Il.ilGenImages(1, out imageId);
        Il.ilBindImage(imageId);

        if (Il.ilLoadImage(url))
        {


            int width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH);
            int height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT);


            Gl.glGenTextures(1, out texObject);


            Gl.glPixelStorei(Gl.GL_UNPACK_ALIGNMENT, 1);


            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texObject);


            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE);


            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, width, height, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, Il.ilGetData());

            Il.ilDeleteImages(1, ref imageId);
        }
        return texObject;
    }
}

И код для рисования это:

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glClearColor(255, 255, 255, 1);

            Gl.glLoadIdentity();


            Gl.glEnable(Gl.GL_TEXTURE_2D);

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, mGlTextureObject);


            Gl.glPushMatrix();


            Gl.glTranslated(0, -1, -10);

            Gl.glRotated(rot, 0, 1, 0);


            Gl.glBegin(Gl.GL_QUADS);


            Gl.glNormal3f(0, 0, 1);
            Gl.glTexCoord2f(0, 0); Gl.glVertex3d(0, 0, 0); 

            Gl.glTexCoord2f(1, 0);  Gl.glVertex3d(1, 0, 0);

            Gl.glTexCoord2f(1, 1); Gl.glVertex3d(1, 1, 0);

            Gl.glTexCoord2f(0, 1);  Gl.glVertex3d(0, 1, 0);



            Gl.glEnd();


            Gl.glPopMatrix();

            Gl.glDisable(Gl.GL_TEXTURE_2D);


            AnT.Invalidate();

Форма просто пуста. Но если я включу молнию, то вот что показано:

Изображение, которое я загружаю, представляет собой простое изображение BMP 100x100, созданное в Paint.

1 ответ

Решение

Проблема появилась, потому что изображение было в неправильном размере. Размер изображения должен быть 64х64, 128х128 или 256х256. Поменял размер на 128х128 и все работало нормально.

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