Я делаю игру, на самом деле очень простую копию Minecraft, для моего классного проекта.Я сейчас застрял в процессе выбора, который позволил бы мне разрушать и создавать блоки в игровой среде.
Я пытался использовать собственный режим выбора OpenGL без какого-либо успеха и строю свой собственный.сборщик лучей, использующий математические библиотеки, кажется большой работой для проекта такого размера.Итак, я решил использовать метод выбора с цветовой кодировкой, который состоит в том, чтобы визуализировать каждый выбираемый объект другим цветом, затем получить цвет в позиции мыши и использовать его для идентификации выбранного объекта.
Myтекущий интерфейс - это просто 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
.
В чем может быть проблема?