У меня проблема с SOIL в C ++. Проблема в том, что когда я пытаюсь загрузить изображение с заданного пути, оно отображается только белым цветом.
Сначала я загружаю его в память следующим образом:
_t = SOIL_load_OGL_texture(_texture.c_str(),
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y);
После этого я использую это так:
glBindTexture(GL_TEXTURE_2D, _t);
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f (0, 0); glVertex3f(-1 + (_p.X)/(App::WinSize().X / 2), 1 - (_p.Y)/(App::WinSize().Y / 2), 0.0f);
glTexCoord2f (1, 0); glVertex3f(-1 + (_p.X + _s.X)/(App::WinSize().X / 2), 1 - (_p.Y)/(App::WinSize().Y / 2), 0.0f);
glTexCoord2f (1, 1); glVertex3f(-1 + (_p.X + _s.X)/(App::WinSize().X / 2), 1 - (_p.Y + _s.Y)/(App::WinSize().Y / 2), 0.0f);
glTexCoord2f (0, 1); glVertex3f(-1 + (_p.X)/(App::WinSize().X / 2), 1 - (_p.Y + _s.Y)/(App::WinSize().Y / 2), 0.0f);
glEnd();
glPopMatrix();
Я использую Visual Studio 2012. Я поместил папку с изображениями в папку, где заканчивается файл .exe, когда он отлаживается.
Я не уверен, что это уместно, но вот установка OpenGL, которую запускает программа, когда она выполняется:
glutInit(&argc, &argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE | GLUT_BORDERLESS);
glEnable(GLUT_MULTISAMPLE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0, 0.0, 0.0, 1.0);
glLoadIdentity();
glOrtho(0.0, size.X, 0.0, size.Y, -1.0, 1.0);
glutInitWindowPosition(position.X, position.Y);
glutInitWindowSize(size.X, size.Y);
Вы проверяете наличие ошибок в процессе загрузки?
добавлять
/* check for an error during the load process */
if( 0 == _t )
{
printf( "SOIL loading error: '%s'\n", SOIL_last_result() );
}
сразу после загрузки текстуры с помощью SOIL_load_OGL_texture
чтобы проверить, была ли загружена ваша текстура без ошибок.
Других решений пока нет …