Проблема выбора цвета в OpenGL - PullRequest
2 голосов
/ 29 декабря 2010

Я делаю игру, на самом деле очень простую копию 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.

В чем может быть проблема?

1 Ответ

2 голосов
/ 16 января 2011

Возможно, вы забыли очистить буфер цвета и отключить буфер глубины, и все ваши визуализированные цвета вызывают Z-Fighting или не отображаются вообще (если z-тест «меньше»). Попробуйте добавить код подкачки и посмотрите, что будет отображаться после кода ColorRender.

...