Текстурирующая головная боль ...
Я не могу понять, где я ошибаюсь здесь. Моя проблема в том, что текстура не выровнена. Изображение слева - это текстурированный четырехугольник OpenGl, а справа - оригинал. Обратите внимание, как столбцы смещены в текстурированном квадрате.
Я не знаю, правильно ли я загружаю текстуру, или делаю ошибку при загрузке в видеомемору, или просто использую неправильные texCoords ...
Изображение является BMP (R8 G8 B8 A8), и ошибка где-то здесь:
(загрузка растрового изображения и загрузка текстуры)
Bitmap fontBmp = new Bitmap("font2.bmp");
MemoryStream ms = new MemoryStream();
fontBmp.Save(ms, ImageFormat.Bmp);
int imageWidth = fontBmp.Width;
int imageHeight = fontBmp.Height;
byte[] fontBytes = ms.GetBuffer();
fontBmp.Dispose();
ms.Dispose();
Gl.glBindTexture(Gl.GL_TEXTURE_2D, (int)TexId.font);
Gl.glPixelStorei(Gl.GL_UNPACK_ALIGNMENT, 1);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP_TO_EDGE);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP_TO_EDGE);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_NEAREST);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_NEAREST);
Gl.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_MODULATE); // Try GL_DECAL...
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, imageWidth, imageHeight, 0, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, fontBytes);
(Квадрат ...)
Gl.glTexCoord2f(0f + (0.5f / 128f), (127f / 128f) + (0.5f / 128f));
Gl.glVertex2i(50, 50);
Gl.glTexCoord2f(0f + (0.5f / 128f), 0f + (0.5f / 128f));
Gl.glVertex2i(50, this.Height - 50);
Gl.glTexCoord2f((127f / 128f) + (0.5f / 128f), 0f + (0.5f / 128f));
Gl.glVertex2i(this.Width - 50, this.Height - 50);
Gl.glTexCoord2f((127f / 128f) + (0.5f / 128f), (127f / 128f) + (0.5f / 128f));
Gl.glVertex2i(this.Width - 50, 50);
Кто-нибудь обнаруживает что-либо, вызывающее это?