SuperLab

O Grupo OpenGL WebGL tem o objetivo de explorar as capacidades da GPU com o OpenGL e WebGL.

Exposição do Grupo de Estudos

Leave a comment

Projetos apresentados no 2º mês de SuperLab

Chegamos ao fim do grupo de estudo, e no 2º mês tivemos mais 2 projetos.

Who am I?

O projeto explora diferentes formas do corpo humano de acordo com seus movimentos.
Diante de um espelho virtual é gerada uma imagem desconstruída onde o usuário é capaz de descobrir e controlar sua própria imagem.

Autores: Harrison Mendonça e Tiago Rezende

Twitris

O Twitris é um jogo de Tetris tridimensional online que tem suas peças fornecidas por tweets. Todo tweet publicado com a hashtag #twitris terá suas letras “I”, “O”, “T”, “L”, “J”, “S” e “Z” transformadas em tetrôminos (a peça de Tetris) para o jogo. Além disso, cada fornecedor de cada peça será identificado com a imagem de seu avatar impressa nos módulos do tetrômino.
O jogo é executado em qualquer plataforma com suporte a WebGL.

Autores: Davi Fontenele e Ian Paletta

Leave a comment

Projetos apresentados no 1º mês de SuperLab

Passados 1 mês após o início do Grupo de Estudos de OpenGL/WebGL, tivemos a apresentação de 2 projetos.

Afinador Online

O Afinador Online é um projeto interativo com objetivo de auxiliar o músico na afinação de seu instrumento musical. Ele representa o quão afinada cada nota está através da distorção da cor e da forma das cifras correspondentes, criando uma melodia visual por meio de uma experiência divertida.
O projeto foi realizado totalmente em HTML5, utilizando recursos ainda experimentais do Google e explorando as capacidades de visualização 3D dos mais modernos navegadores.

Autores: Harrison Mendonça, Pedro Rezende, Nicole Schlegel e Davi Fontenele.

Performance de Dança

A Performance de Dança é uma investigação no universo da dança e das novas tecnologias.
Nessa performance uma dançarina é confrontada a um outro corpo que não é feito nem
de carne nem de osso, mas sim do seu espelho virtual.
As questões que aparecem quando estas duas presenças, física e digital são confrontadas é o foco do trabalho.

A pesquisa inicial deste projeto é fruto de uma pesquisa de mestrado desenvolvida na Haute École d’Arts em Genebra, na Suíça sobre o trabalho do coreógrafo americano Merce Cunningham (um dos pioneiros a trabalhar com dança e novas tecnologias).

O objetivo do projeto consiste em criar um dispositivo interativo que possa ampliar os gestos da dançarina transpondo o fluxo do movimento para outra modalidade perceptiva como a imagem projetada.
http://instagram.com/p/W3AOT2AYQm/
http://instagram.com/p/W2_zzzAYQA/

Autores: Adriana Maluf, Carlos Oliveira, Cris Maria Flor, Yuka Parkinson.
Colaboradores: Beatrice Catarine, Daniel Tumati e Ian Paletta.

Leave a comment

Demoscene: Inspirações tecnológicas para OpenGL

Demoscene é uma subcultura da arte informática especializada na produção de demos, apresentações áudio-visuais não-interativas, que são executadas em tempo-real em um computador. O objetivo principal de um demo é demonstrar apuro técnico em habilidades de programação, artes gráficas e música entre os diversos demogroups.

Wikipedia: Demoscene

Farbrausch fr-041: debris (2007)
http://www.pouet.net/prod.php?which=30244
http://www.youtube.com/watch?v=wqu_IpkOYBg
Todo o cenário, os prédios, as pontes, todas as texturas, música e som, passagem de câmera, tudo isso em 96 kilobytes – o que indica, além da engenhosidade dos programadores, que tudo foi gerado através de código.

Farbrausch fr-043: rove (2010)
http://www.pouet.net/prod.php?which=54588
http://www.youtube.com/watch?v=hp-qLnA0zAQ
Composições com máscaras tridimensionais, formas procedurais com animação, iluminação, névoa, variações de nível de detalhe.

Approximate: Gaia Machina (2012)
http://www.pouet.net/prod.php?which=59107
http://www.youtube.com/watch?v=UchVsOVxYXQ
Formas da natureza, em 64KB.

Andromeda Software Development: Lifeforce
http://www.pouet.net/prod.php?which=31571
http://www.youtube.com/watch?v=o9GLl6kI4hQ
Máscaras bi- e tridimensionais, filtros, efeitos e simulações de fluidos em tempo real, dentre várias outras técnicas.

Conspiracy: Chaos Theory
http://www.pouet.net/prod.php?which=25774
http://www.youtube.com/watch?v=MAnhcUNHRW0
Texturas, filtros, formas geométricas e iluminação, em 64KB.

Farbrausch: .kkrieger
http://www.pouet.net/prod.php?which=12036
Um jogo, um first-person shooter, com cenários, inimigos, texturas e tudo mais, em 96KB.

Quite & orange: cdak
http://pouet.net/prod.php?which=55758
http://www.youtube.com/watch?NR=1&v=RCh3Q08HMfs
4KB. Quatro kilobytes.

Rgba: Elevated
http://pouet.net/prod.php?which=52938
http://www.youtube.com/watch?v=_YWMGuh15nE
Agora, o mundo. Em 4KB.

Farbrausch & Haujobb: Time Index (2003)
http://www.pouet.net/prod.php?which=10999
http://www.youtube.com/watch?v=rGHpGFH8Scs

Conspiracy: A Place Called Universe (2003)
http://www.pouet.net/prod.php?which=10130
http://www.youtube.com/watch?v=5ZNaKmqqaxQ&hd=1

Conspiracy: Beyond (2004)
http://www.pouet.net/prod.php?which=11452
http://www.youtube.com/watch?v=E94Re7mL5vs

Andromeda Software Development: Rupture (2009)
http://www.pouet.net/prod.php?which=52931
http://www.youtube.com/watch?v=pmw87w7i6rQ
Composição de cenário e objetos através de interseções e uniões entre objetos, em tempo real.

Andromeda Software Development: SPIN (2011)
http://www.pouet.net/prod.php?which=57446
http://www.youtube.com/watch?v=8MMwO8Mvqfs
Rotoscopia na placa de vídeo.

Fairlight & Carillon & Cyberiad: Agenda Circling Forth (2010)
http://www.pouet.net/prod.php?which=54603
http://www.youtube.com/watch?v=GJruj0YkDsg
Nenhum polígono foi (tecnicamente) utilizado na produção dessa demo.

Kewlers & MFX: 1995 (2006)
http://www.pouet.net/prod.php?which=25783
http://www.youtube.com/watch?v=weGYilwd1YI
Vários efeitos “oldschool” (de antes do uso generalizado de placas de vídeo 3D) reimplementados com OpenGL.

Autor: Tiago Rezende

Leave a comment

Coleções de shaders GLSL / GLSL ES

http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html
http://glsl.heroku.com/
http://www.iquilezles.org/apps/shadertoy/
http://malideveloper.arm.com/develop-for-mali/tools/mali-gpu-shader-library/
http://www.geeks3d.com/geexlab/shader_library.php
http://puredata.hurleur.com/sujet-5000-collection-glsl-effects
https://code.google.com/p/glslang-library/

Autor: Tiago Rezende

Leave a comment

Artigos e Referências Interessantes

Making a 3D Game with OpenGL: Deferred shading and stuff
http://www.neuroproductions.be/opengl/making-a-3d-game-with-opengl-deferred-shading-and-stuff/

Illustrative Rendering In TeamFortress2
https://www.youtube.com/watch?v=sIikwDbZTCI

Scalable High Quality Motion Blur and Ambient Occlusion
http://advances.realtimerendering.com/s2012/index.html

[Cinder] Shaders, Geometry, and the Kinect – Part 1
http://www.creativeapplications.net/tutorials/shaders-geometry-and-the-kinect-part-1-cinder-tutorials/

[Cinder] Guide to Meshes In Cinder
http://www.creativeapplications.net/tutorials/guide-to-meshes-in-cinder-cinder-tutorials/

Referências:
[Processing, Kinect] Kinect Graffiti Tool
http://www.creativeapplications.net/processing/kinect-graffiti-tool-processing-kinect/

[Cinder] Cindermedusae
http://www.creativeapplications.net/cinder/cindermedusae-cinder/

[WebGL] Fractal Lab
http://www.creativeapplications.net/webapp/fractal-lab-webapp/

[openFrameworks] F**k You, Buddy
http://www.creativeapplications.net/events/fk-you-buddy-openframeworks-events/

Leave a comment

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

Leave a comment

Tutoriais OpenGL e WegGL

OpenGL < 3.0
http://nehe.gamedev.net/

OpenGL >= 3.0
http://www.arcsynthesis.org/gltut/
http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html

WebGL
http://www.khronos.org/webgl/wiki/Tutorial

Leave a comment

Apresentações Iniciais

Apresentação de Introdução ao Grupo de Estudos

Apresentação com os tópicos básicos de OpenGL e WebGL

Leave a comment