SuperLab

Bindings de OpenGL para várias linguagens e ambientes

C:
OpenGL e OpenGLES são especificadas como bibliotecas C puras, para facilitar acesso por outras linguagens, já que extensões dessas outras linguagens são comumente programadas em C.

  • A interface padrão do OpenGL é o header <GL/gl.h> e a biblioteca libGL ou libOpenGL (ou OpenGL32.lib, para Visual C++, ou OpenGL.framework, para OSX), disponível para praticamente todos os compiladores de Windows, Linux e OS X. Essa interface usa, por padrão, a versão default do OpenGL disponível no sistema – para Windows seria OpenGL 1.2, para OS X seria 2.1 no Snow Leopard, e 3.2 no Lion e Mountain Lion.
  • Para usar as versões mais novas do OpenGL nesses sistemas, além de suporte dos drivers da placa de vídeo, exige usar alguns mecanismos extras – pedir informações aos drivers de vídeo diretamente, ou usar bibliotecas para isso. Uma das bibliotecas mais usadas para acessar recursos das versões mais novas é GLEW (GL Extension Wrangler), em http://glew.sourceforge.net/, e outra é GLee (GL Easy Extension), em http://www.opengl.org/sdk/libs/GLee/
  • OpenGL por padrão não lida com criação de janelas e gerenciamento de input (mouse, teclado, etc.), essas tarefas são das bibliotecas do sistema operacional em questão, mas há bibliotecas que abstraem as diferenças entre as plataformas, que você pode escrever código que não necessita de (muitas) mudanças entre as plataformas. As bibliotecas mais utilizadas para esse fim são as seguintes:
  • GLUT (http://www.opengl.org/resources/libraries/glut/), com as variantes mais recentes FreeGLUT (http://freeglut.sourceforge.net/) e OpenGLUT (http://openglut.sourceforge.net/)
  • SDL (http://www.libsdl.org), que dá para usar em praticamente qualquer plataforma, e que pessoalmente recomendo – funciona tanto com OpenGL quanto OpenGLES onde for o caso.
  • GLFW (http://www.glfw.org/)
  • Há outras bibliotecas que são frequentemente utilizadas junto com OpenGL para certas operações, como gerar superfícies NURBS e fazer renderização de fontes em 3D. O OpenGL padrão já vem com algumas bibliotecas para isso, o GLU (OpenGL Utility Library), que está no header <GL/glu.h> e na biblioteca libGLU.

C++:

  • C++ é um superset de C, portanto praticamente todas as bibliotecas de C estão disponíveis para utilizar com C++. Existem, porém, algumas bibliotecas que usam recursos específicos de C++ para permitir acesso ao OpenGL. Uma boa parte dessas já é bem conhecida do pessoal.
  • OpenFrameworks (http://openframeworks.cc)
  • Cinder (http://libcinder.org)
  • SFML (http://www.sfml-dev.org)
  • GLM (http://glm.g-truc.net/) é uma biblioteca de operações matemáticas em OpenGL, exclusiva de C++.

Python:

  • PyOpenGL (http://pyopengl.sourceforge.net/) é a biblioteca padrão para utilizar OpenGL em Python. Ela tem interoperabilidade com as bibliotecas de GUI mais utilizadas, inclusive a TkInter, a biblioteca de interface padrão do Python.
  • PyGame (http://www.pygame.org), para utilizar junto com PyOpenGL, permite gerenciar janelas e input, já que é baseada em SDL, mas com vários idiomas pythônicos.
  • NumPy (http://www.numpy.org/) não é uma biblioteca de OpenGL propriamente dita, mas por ser uma biblioteca de operações matemáticas ela se torna bastante útil para mexer com 3D e processamento de imagens.
  • Nodebox for OpenGL (http://www.cityinabottle.org/nodebox/) é um droplet para Nodebox (http://nodebox.net/) que permite usar OpenGL nas composições.

Ruby:

  • Ruby-opengl (http://ruby-opengl.rubyforge.org/ ou gem install ruby-opengl) é a biblioteca padrão de OpenGL em ruby. Ela vem também com uma versão de GLUT, que não é tão flexível quanto Gosu ou outras bibliotecas.
  • Gosu (http://www.libgosu.org ou gem install gosu) é uma biblioteca no mesmo estilo de PyGame, com gerenciamento de janelas e input e um estilo específico de ruby.
  • Ashton (https://github.com/Spooner/ashton ou gem install ashton) é uma biblioteca que permite utilizar shaders GLSL com facilidade dentro de ruby.
  • Ruby-processing (https://github.com/jashkenas/ruby-processing ou gem install ruby-processing) é uma tradução das bibliotecas padrão de processing para ruby. O acesso ao OpenGL é diferente do processing original, mas as mesmas técnicas das outras linguagens podem ser utilizadas.
  • Ray (http://mon-ouie.github.com/projects/ray.html ou gem install ray) é uma biblioteca no estilo Gosu e PyGame, mas com suporte direto a versões mais recentes de OpenGL.

Processing:

Java:

  • JOGL (https://jogamp.org/jogl/www/) é uma binding de OpenGL que dá para ser utilizada com AWT, Swing e SWT diretamente, além de outros toolkits com um pouco mais de trabalho.
  • LWJGL (http://www.lwjgl.org/) é uma biblioteca que facilita o gerenciamento de OpenGL com input e interface.

Javascript:
É o jeito padrão de acessar WebGL, mas também existe jeito de acessar o OpenGL de desktop (e mobile).

PureData:

Pascal/Delphi:

  • As bibliotecas padrão das versões mais recentes de Delphi/FreePascal já tem os módulos de OpenGL disponíveis, mas eles são os das versões padrão dos sistemas. As chamadas são basicamente as mesmas da versão original em C, mas com devidas mudanças para quando é necessário usar ponteiros.

Max-MSP/Jitter:

  • A própria biblioteca Jitter já tem objetos para acessar OpenGL, sob o nome jit.gl.* . Um dos mais interessantes é jit.gl.sketch, que dá para enviar mensagens bem parecidas com chamadas OpenGL de outras linguagens, diretamente ao jit.gl.render.

.NET/Mono:

  • Linguagens no ambiente .NET podem utilizar OpenTK (http://www.opentk.com/), que é um conjunto de bindings para OpenGL que funciona no .NET para Windows e em Mono para as outras plataformas.

Autor: Tiago Rezende

This entry was posted in Grupo de Estudos OpenGL & WebGL, Programas. Bookmark the permalink.

Leave a reply