Проблема с отображением текстуры 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 и все работало нормально.