Java Bindings for OpenGL JOGL An Overview Prof. Reginaldo do Prado Universidade Guarulhos - UnG Objetivo 1. Configurar o ambiente de execução para o uso do JOGL 2. Criar imagens bi e tridimensionais utilizando OpenGL 3. Criar animações 2 0. Configurar 3 • Windows – Incluir no CLASSPATH o caminho para jogl.jar e gluegen-rt.jar – Incluir no PATH o caminho para JOGL_HOME/lib • Eclipse – Deve ser feita a inclusão dos arquivos acima para cada projeto – Siga as instruções de: http://linus.uac.pt/~cogumbreiro/gfx/ 4 1. Preparando o terreno 5 O que é OpenGL... • API para programação gráfica • Biblioteca de rotinas gráficas e de modelagem • Interface para hardware gráfico • Produz imagens de alta qualidade, mas... 6 OpenGL não é... • Uma linguagem de programação • Um programa para arte computacional • Um ray-tracer – Se quer fazer arte, visite http://www.povray.org/ 7 E como funciona? pipeline OpenGL 8 O que é JOGL... • Pacote que permite o acesso de Java às rotinas do OpenGL • Exceção às chamadas relacionadas às janelas • Mantém a portabilidade do OpenGL • Inconsistente com a POO pela natureza procedural do OpenGL 9 Como usá-los juntos • Primeiro: criar um GLCanvas ou GLJPanel • Depois registrá-lo a um GLEventListener • O listener deve implementar os métodos – – – – init(GLDrawable drawable ) reshape(GLDrawable drawable, int i, int x, int width, int height ) display(GLDrawable drawable ) displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged ) 10 Criar uma janela • Criar um Frame ou JFrame • Adicionar o GLCanvas ou GLJPanel • Fazer a implementação dos métodos da interface GLEventListener Lesson01.java, FrameGL & projection.exe 11 2. Criar imagens 12 Desenho de primitivas • Objetos criados com OpenGL são apenas combinações de primitivas – glBegin(tipo-primitiva) <vértices> glEnd() • Pontos – glBegin(GL_POINTS) • Segmentos – glBegin(GL_LINES) – glBegin(GL_LINE_STRIP) – glBegin(GL_LINE_LOOP) PrimitivaI.java & shapes.exe 13 Desenho de primitivas • Triângulos – glBegin(GL_TRIANGLES) – glBegin(GL_TRIANGLE_STRIP) – glBegin(GL_TRIANGLE_FAN) • Quadriláteros – glBegin(GL_QUADS) – glBegin(GL_QUADS_STRIP) • Polígonos em geral – glBegin(GL_POLYGON) Lesson03.java 14 3. Animação 15 Fazer animação é: • Fazer vários desenhos com pequenas diferenças • Fazer esses desenhos em um curto espaço de tempo • Fazer a troca dos desenhos antes que o usuário perceba 16 ... e o que é necessário? • Uso de variáveis de controle • Atualizar essas variáveis a cada iteração do loop de animação... • ... ou atualizá-las a cada interação do usuário. PrimitivaII.java, Lesson04.java & transformation.exe 17 Imagem 3D • Pode ser obtida como uma concatenação de primitivas 2D • Requerem o uso do sistema cartesiano tridimensional EspacoCartesiano.java & Lesson05.java 18 ...e para saber mais? • Dê uma olhada em: – – – – – http://nehe.gamedev.net/ http://today.java.net/pub/a/today/2003/09/11/jogl2d.html http://www.inf.pucrs.br/~manssour/OpenGL/Tutorial.html http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/OpenGL.html http://pepijn.fab4.be/software/nehe-java-ports 19 Muito obrigado contato: [email protected] [email protected] 20