2010-12-28 5 views
2

Я делаю игру, на самом деле очень основную копию Minecraft, для моего проекта класса. Я застрял в процессе выбора прямо сейчас, что позволило мне уничтожить и создать блоки в игровой среде.Проблема с кодировкой цвета в OpenGL

Я пытаюсь использовать собственный режим выбора 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 различных оттенков серого I n my pixels массив.

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

ответ

2

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