OpenGL.Тестирование цвета пикселя.Может кто-нибудь объяснить мне OpenGl glGetPixels? - PullRequest
1 голос
/ 17 ноября 2010

Я только начинаю с OpenFrameworks, и я пытаюсь сделать что-то, что должно быть простым: проверить цвет пикселя в определенной точке экрана.

Я считаю, что нет хорошего способа сделать этов openFrameworks, но я могу перейти к openGL и glReadPixels.Тем не менее, у меня много проблем с этим.

На основании http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml Я начал пытаться сделать это:

glReadPixels(x,y, 1,1, GL_RGB, GL_INT, &an_int);

Я понял, что, как я былпроверяя значение одного пикселя (ширина и высота равны 1) и присваивая ему GL_INT как тип GL_RGB в качестве формата, один пиксель должен занимать одно целое (4 байта). Следовательно, я передал указатель на int в качестве аргумента данных,

Тем не менее, первое, что я заметил, было то, что glReadPixels, похоже, забивал некоторые другие локальные переменные в моей функции, поэтому я перешел к созданию массива из 10 int и теперь передаю его.Это прекратило любой странный побочный эффект, но я все еще не знаю, как интерпретировать то, что он возвращает.

Итак ... какая правильная комбинация аргументов формата и типа, которую я должен передать, чтобы безопасно получить что-точто может быть легко распаковано в его значения RGB?(Обратите внимание, что я делаю это через openFrameworks, поэтому я сам не настраиваю openGL явно. Мне кажется, я просто получаю значения по умолчанию openFramework / openGL. Единственный фрагмент конфигурации, который я знаю, это НЕ настройка альфа-блендинг, который, как я считаю, означает, что пиксели представлены 3 байтами (R, G, B, но без альфа)).Я предполагаю, что GL_RGB - формат, который соответствует этому.

1 Ответ

2 голосов
/ 17 ноября 2010

Если вы сделаете это, вам нужно три типа int: один для R, один для G, один для B. Если вы считаете, что вы должны использовать:

unsigned char RGB[3];
glReadPixels(x,y, 1,1, GL_RGB, GL_UNSIGNED_BYTE, rgb);
...