Я пытаюсь сделать простую текстуру (64х64) для четырехугольника 64х64. Сам квад рендеринг рендерит, но не текстура. (Это рендеринг пустого белого квадрата 64х64.)
Я использую ПОЧВУ для загрузки изображения.
static GLuint LoadPNG(char* filename)
{
GLuint texture = SOIL_load_OGL_texture
(
filename,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);
if (texture == 0)
Log("Texture Load Error: " + string(filename));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return texture;
}
Это мой код рендеринга, возможно, я отображаю его неправильно, поэтому это тоже может быть проблемой.
// Draw Textured Quad
static void glDrawTexturedQuad(glRectF rect, GLuint tex)
{
// Bind Texture
glBindTexture (GL_TEXTURE_2D, tex);
// Render Settings
glEnable(GL_TEXTURE_2D);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glColor3ub(255,255,255);
glBegin(GL_QUADS);
// Top Left
glTexCoord2f(0, 1);
glVertex2f(rect.X, rect.Y);
// Top Right
glTexCoord2f(1, 1);
glVertex2f(rect.X + rect.Width, rect.Y);
// Bottom Right
glTexCoord2f(1, 0);
glVertex2f(rect.X + rect.Width, rect.Y + rect.Height);
// Bottom Left
glTexCoord2f(0, 0);
glVertex2f(rect.X, rect.Y + rect.Height);
glEnd();
}
Вот остаток соответствующего кода. (На самом деле это всего лишь временный код, чтобы склеить его все для тестирования, я придумаю лучшее решение после того, как оно заработает.)
static GLuint Texture;
static void LoadTextures()
{
Texture = LoadPNG("filename");
}
static void glRenderTest()
{
glRectF rect = {20, 20, 64, 64};
glDrawTexturedQuad(rect, Texture);
}
Я также следовал всем найденным советам здесь По-прежнему не отображается моя текстура.
Я поменял LodePNG на SOIL (Простая библиотека изображений OpenGL), он немного проще в использовании, но все еще не работает.
Я добавил glTexEnv, как предложено в ответе ниже, но я все еще просто получаю белое поле, попробую еще несколько настроек, но я не думаю, что это было так. (Изменить: пробовал различные флаги, ничего, все еще только белый квад.)