13.07.2015 Views

Manual de Apoio 2010

Manual de Apoio 2010

Manual de Apoio 2010

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Figura 7.4: Utilização <strong>de</strong> glDrawPixels/glPixelZoomOs argumentos x, y, width e height, <strong>de</strong>finem o rectângulo a copiar 1 . O format e type são o formato e otipo <strong>de</strong> dados utilizados para armazenar o conteúdo do buffer na variável <strong>de</strong> saída pixels. In<strong>de</strong>pen<strong>de</strong>ntementeda forma como a informação está armazenada no color buffer, o OpenGL encarrega-se <strong>de</strong> fazer as conversõesnecessárias.Po<strong>de</strong> ser útil ainda copiar informação <strong>de</strong>ntro do mesmo buffer. Para tal <strong>de</strong>finimos o canto inferior esquerdo(com glRasterPos/glWindowPos) da zona a copiar. A função para efectuar a cópia é:glCopyPixels (int x, int y,int width , int height ,int type);Mais uma vez, o x, y, width e height, <strong>de</strong>finem o rectângulo <strong>de</strong> origem. O argumento type diz o que estamosa copiar, po<strong>de</strong>ndo tomar o valor GL COLOR para copiar do color buffer, GL DEPTH para copiar do <strong>de</strong>pth buffer ouGL STENCIL para copiar do stencil buffer.Por omissão estas operações <strong>de</strong> cópia realizam-se no back buffer em contextos com suporte para doublebuffering, ou no front buffer em contextos com single buffer. Para alterar a fonte ou <strong>de</strong>stino para a cópia,utilizamos:glDrawBuffer ( int <strong>de</strong>stination );glReadBuffer ( int source );O argumento <strong>de</strong>stination da função glDrawBuffer, especifica on<strong>de</strong> os pixels são escritos pelas operaçõesglDrawPixels/glCopyPixels. O argumento source da função glReadBuffer especifica a fonte para os pixelslidos nas operações glReadPixels/glCopyPixels. Os valores possíveis para os argumentos source/<strong>de</strong>stinationpo<strong>de</strong>rão ser: GL NONE, GL FRONT, GL BACK, GL FRONT AND BACK, GL FRONT LEFT, GL FRONT RIGHT, . . .Um caso prático <strong>de</strong> utilização das operações com pixels seria, por exemplo, armazenar o conteúdo do colorbuffer actual num ficheiro <strong>de</strong> imagem. A fim <strong>de</strong> ilustrar os conceitos explicados nesta secção, exemplificamoscomo isso po<strong>de</strong>ria ser feito:// Ler o valor READ BUFFER actual// ( para repor mais tar<strong>de</strong> )IntBuffer lastBuffer = IntBuffer . allocate (1);gl. glGetIntegerv ( GL2 . GL_READ_BUFFER , lastBuffer );// Vamos ler o FRONT BUFFER1 sendo x e y o canto inferior esquerdo72

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!