Manual de Apoio 2010
Manual de Apoio 2010
Manual de Apoio 2010
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
gl. glReadBuffer ( GL2 . GL_FRONT );// O ByteBuffer output ira armazenar temporariamente// a nossa imagemByteBuffer output = ByteBuffer . allocate ( width * height * 3); // RGBgl. glReadPixels (0, 0, // Canto inferior esquerdowidth , height , // Tamanho a lerGL2 . GL_BGR , // Formato Blue , Green , Red ( targa )GL2 . GL_UNSIGNED_BYTE , // Tipo <strong>de</strong> dados unsigned byteoutput);// Criar um TGA a partir do ByteBufferTGAImage img = TGAImage . createFromData ( width , height , false , false , output );try {img . write ("c:/ my.tga "); // Guardar a imagem no disco} catch ( IOException e) {// Falha ao escrever o ficheiro}// Restaurar o read buffer anteriorgl. glReadBuffer ( lastBuffer . get (0));A função glGet(int pname, ...) 1 permite-nos obter informação das variáveis do OpenGL (nestecaso o buffer <strong>de</strong> leitura actual - GL READ BUFFER). No JOGL a maior parte das funções que retornam valores,utilizam subclasses <strong>de</strong> Buffer (neste caso IntBuffer) para os armazenar. É importante no nosso códigoOpenGL, restaurarmos, na medida do possível, o estado anterior das coisas, daí obtermos o lastBuffer e serfeita a sua reposição no fim do bloco <strong>de</strong> código, utilizando glReadBuffer(lastBuffer.get(0)). Seguidamenteespecificamos que o buffer para leitura será o que se encontra visível (GL FRONT):gl. glReadBuffer ( GL2 . GL_FRONT );Inicializamos um ByteBuffer com o tamanho da janela (width×height) multiplicado por 3, uma vez quevamos armazenar as três componentes <strong>de</strong> cor RGB, ficando então width×height×3.ByteBuffer output = ByteBuffer . allocate ( width * height * 3);Os ficheiros targa armazenam a informação da cor na or<strong>de</strong>m BGR (Blue, Green, Red), pelo que o formatodos dadosm especificado é GL BGR. O seguinte código copia o conteúdo do front buffer e coloca-o no nossoByteBuffer.gl. glReadPixels (0, 0, // Canto inferior esquerdowidth , height , // Tamanho a lerGL2 . GL_BGR , // Formato Blue , Green , Red ( targa )GL2 . GL_UNSIGNED_BYTE , // Tipo <strong>de</strong> dados unsigned byteoutput);Finalmente, criamos uma instância <strong>de</strong> TGAImage com base no ByteBuffer output, utilizando a função:TGAImage . createFromData (int width , int height , // Tamanho da imagemboolean hasAlpha , // Formato contem alphaboolean topToBottom , // A imagem esta armazenada "ao contrario "ByteBuffer output // ByteBuffer com os dados);Esta função é utilizada da seguinte forma:TGAImage img = TGAImage . createFromData ( width , height , false , false , output );Finalmente para armazenar a nossa imagem no disco fazemos:img . write ("c:/ my.tga ")A imagem my.tga irá conter o conteúdo do nosso front buffer.1 http://www.opengl.org/sdk/docs/man/xhtml/glGet.xml73