Я делаю игру, на самом деле очень простую копию Minecraft, для своего классного проекта. Сейчас я застрял в процессе выбора, который позволит мне разрушать и создавать блоки в игровой среде.
Я пытался использовать собственный режим выбора OpenGL без какого-либо успеха, и создание моего собственного средства выбора лучей с использованием математических библиотек кажется большой работой для проекта такого размера. Итак, я решил использовать метод выбора с цветовой кодировкой, который состоит в том, чтобы отображать каждый выбираемый объект в другом цвете, затем получать цвет в позиции мыши и использовать его для идентификации выбранного объекта.
Мой текущий интерфейс — это просто 3D-рендеринг множества ящиков, сложенных друг на друга, создающих структуру, похожую на ландшафт. Поскольку я еще не накладывал текстуру, все прямоугольники окрашены в оттенки серого (освещение включено).
Теперь время для реального кода:
Это часть инициализации, включающая текстурирование, освещение и т. д.
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
Когда кнопка мыши нажата, я пытаюсь получить цвет в позиции курсора мыши (фактически всегда в середине окна) следующим образом:
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DITHER);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
renderColors();
GLubyte pixels[3];
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, (void *)pixels);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glEnable(GL_DITHER);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
Проблема в том, что отключения не работают, и я всегда получаю значения RGB разных оттенков серого в своем массиве pixels
.
В чем может быть проблема?