[java,opengl]jak pobrać kolor z piksela?


#1

Witam,

czy ktoś wie jak pobrać kolor z piksela w mojej grze? A potem pobrać kolejno kolory RGB i przypisać je do zmiennej?

Byłbym wdzięczny za odpowiedź!


(nnick) #2

http://www.talisman.org/opengl-1.1/Reference/glReadPixels.html


#3

Dobra, ale jak potem te kolory RGB zapisać do zmiennych?


(Fiołek) #4

Idąc za dokumentacją glReadPixels przyjmuje: koordynaty i rozmiar okna(0, 0, width, height dla pobrania całego okna, x, y, 1, 1 dla jednego piksela itp.), format pikseli(dla Ciebie odpowiedni będzie GL_RGB, czyli pobiera tylko składowe R, G i B danego piksela), typ zapisu(zależnie od dokładności, przypuszczam, że Tobie GL_UNSIGNED_BYTE wystarczy - 8 bitów(unsigned char W C) na jedną składową, czyli dana składowa będzie z zakresu 0..255) i ostatnim parametrem jest wskaźnik na już zaalokowany kawałek pamięci na piksele. Dla parametrów które podałem, poszczególne składowe zapisane są w kolejnych bajtach, tzn. jeden piksel zajmuje 3B, z czego pierwszy bajt to R, drugi - G, trzeci - B. Przykład:

unsigned char* pixels = new unsigned char[100 * 100 * 3]; //Przykładowe rozmiary: 100x100 i 3 składowe per pixelglReadPixels(0, 0, 100, 100, GL_RGB, GL_UNSIGNED_BYTE, pixels);int x = 0; x  100; ++x) //Iterujemy po wszystkich pixelach wierszami{    for(int y = 0; y  100; ++y)    {        int pixelIdx = (y * 100 + x) * 3; //Indeks piksela i zarazem składowej R        unsigned char R = pixels[pixelIdx], G = pixels[pixelIdx + 1], B = pixels[pixelIdx + 2];    }