Начал пилить один небольшой проект и застрял в самом начале.
Не могу понять, как отобразить через OpenGL текстурированный 2D прямоугольник. Вместо текстуры отображается одноцветный прямоугольник. Причем отображается цветом, которым перед отрисовкой прямоугольника отрисовывалась надпись с FPS.
Вот минимальный пример:
https://anonfiles.com/0b79nc73n1/funMashine.tar_gz
Собирать можно как через cmake, так и через qmake. Используется голый C++11 со стандартными графическими библиотеками. Для загрузки картинки используется либа SOIL (в Дебиане она есть в стандартном репозитарии). Если собирать через qmake, то перед запуском нужно проследить чтобы рядом с бинарником лежала директория /pic.
В данном примере отрисовка картинки запускается в методе:
void WheelsKit::drawSource()
{
CORE.imagesRepo().image("symbol01").draw();
}
Сам метод отрисовки выглядит так:
void Image::draw()
{
// cout << "Draw texture id: " << mTextureId << "\n";
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, mTextureId);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3f(-0.5, -0.5, 0.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(-0.5, 0.5, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex3f(0.5, 0.5, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(0.5, -0.5, 0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}
В переменной mTextureId хранится номер заранее загруженной в GPU текстуры. Загрузка текстуры происходит в начале программы, в методе:
void Image::load(string fileName) {...}
Инициализация OpenGL происходит при старте программы, в методе:
void Core::openGlInit(int &argc, char** argv)
Я уже третий день бъюсь со всякими параметрами OpenGL, но текстуру все еще не увидел. Видимо, я что-то упускаю, какую-то настройку. Что еще надо добавить/переделать?