1
VRJugglerVRJugglerBruno Barberi Gnecco
Rita de Fátima Rodrigues
Realidade VirtualProf. Marcelo Knörich Zuffo
2
Programação da ApresentaçãoProgramação da Apresentação
Visão Geral (Rita)– O que é VRJuggler ?– Histórico– Arquitetura– Object Application
Visão prática (Bruno)– Estrutura geral de um programa VRJuggler– Exemplo simples– Comparação com outras soluções– Conclusão
3
Filosofia de desenvolvimentoFilosofia de desenvolvimentoSem main(): “Don't call me, I'll call you”Objetos da aplicação derivam de classes
baseDesenvolvimento de aplicativo via “Filling
in the Blanks”
4
Aplicativos objetoAplicativos objetoModificações em tempo de execuçãoBaixa interdependênciaInterfaces estáveis
5
Desenvolvimento de Desenvolvimento de programasprogramas
Programa é um objeto:class userApp : public vrj::App {public:init();preFrame();postFrame();...
}
6
Aplicativos como objetosAplicativos como objetosDerivação de classes permite minimizar
trabalhoPrograma pode ser derivado de classes
mais avançadas, como:– GlApp (OpenGL)– PfApp (Performer)– OpenSGApp– VTKApp
7
Estrutura de classesEstrutura de classes
vjGlAppdrawcontextInitcontextClose
vjApp
initapiInitexit…
userOglAppInitapiInitdrawpreFramepostFrame
8
Aplicativo Aplicativo int main (int argc, char* argv[]) { vjKernel* kernel = vjKernel::instance();
simpleApp* app = new simpleApp(); kernel->loadConfigFile(...); kernel->start(); kernel->setApplication(app);
while ( ! exit ) {// sleep
}}
Instancia a kernel
Instancia o aplicativo
Configura a kernel
Inicia a kernel
Especifica o aplicativo
9
Portando aplicativosPortando aplicativosPortar aplicativos OpenGL, CAVElib:
“receita de bolo”Problema: comandos compilados (p.e.,
display lists) não são compartilhados entre contextos– Em VR Juggler estas inicializações devem ir
em vrj::GlApp::contextInit().
10
NetJugglerNetJugglerLayer sobre o VRJuggler.Torna um cluster gráfico em uma máquina
VRJuggler single image.Executa a distribuição e sincronia de dados
e computações entre os nós automaticamente.
Implementação sobre MPI.
11
Estudo comparativoEstudo comparativoOutras soluções semelhantes existem
– CAVElib– Syzygy– Chromium– FreeVR– DICElib
12
CAVElibCAVElibPrimeira biblioteca do gêneroPadrão para aplicativos CAVE em SGIPaga, código fechadoInicialmente só para IRIX, agora também
para SUN, HPUX, LINUX e WIN32
13
CAVElib (II)CAVElib (II)Funcionamento semelhante ao GLUT, mas
muito mais poderosoCalcula janelas e projeção perspectiva
automaticamente.Compatível com OpenGL e PerformerAbstração de inputSuporta multiprocessamento
14
Exemplo de CAVElibExemplo de CAVElibmain(int argc,char **argv) {
CAVEConfigure(&argc,argv,NULL);app_shared_init(argc,argv);CAVEInit();CAVEInitApplication(app_init_gl,0);CAVEDisplay(app_draw,0);app_compute_init(argc,argv);while (!getbutton(ESCKEY)) {
app_compute();}CAVEExit();
}
Configura Cavelib
Inicializa Cavelib
Callback de inicialização OpenGL
Callback de desenho
Termina Cavelib
15
CAVElib: prós e contrasCAVElib: prós e contras Prós
– Padrão conhecido– Sistema desenvolvido
e estável– Portabilidade– Base de programas
grande– Simples de usar
Contras– Código fechado– Cara– Som é suportado por
biblioteca externa
16
SyzygySyzygyHigh-End VR on Whatever Random Crap
“You have Lying Around”Desenvolvida para clusters. Tile renderingOpen sourceUniversidade de
Illinois at Urbana
17
Syzygy IISyzygy IIImplementa um “SO distribuído”: PhleetInstalação complexaSuporte a inputImplementa scene graph e som 3D
18
ChromiumChromiumSolução para divisão de renderização (tile
rendering)Nova versão da WireGLEmula OpenGLExtensívelOpen sourceÚnico ponto de vista (futuro?)
19
FreeVRFreeVR Solução open source independente Suporta diversos sistemas de I/O Desenvolvido para ser fácil de rodar Portável:
– SGI IRIX 6.x (o32, n32 & 64 bit) – Linux– BSD Unix (Free/Net/Open) – Solaris – Macintosh OS/X (Darwin w/ XFree86) – Cygwin (Undergoing development) – HP-UX– Tru-64
20
DICElibDICElib Biblioteca com sincronia (barreira) e
compartilhamento de dados (síncrono). Não suporta input, configurações de visualização Escrita sobre sockets: TCP e UDP. Programas alvo: pouco compartilhamento de
memória, alta taxa de sincronia. Poucas modificações necessárias do programa
single-view para executar no cluster. Estável, nova versão em curso.
21
Estudo de caso: CAVEQuake 3Estudo de caso: CAVEQuake 3 Escrito por Paul Rajlich ([email protected]) http://brighton.ncsa.uiuc.edu/~prajlich/ Suporta 7 interfaces diferentes:
– CAVElib– VRJuggler– GLUT– SGI MPSDK– FreeVR– SDL– GLX– [Syzygy]
22
Conclusão IConclusão I Alternativa poderosa e portável Arquitetura complexa com muitas abstrações
– Perda de performance– Curva de aprendizado
Estruturação lógica do código e do programa– Pode ser difícil portar programas existentes (ou não)– Programas são sempre semelhantes e fáceis de
entender e modificar Instalação e configuração não triviais
23
Conclusão IIConclusão IIIntegração com várias APIs: OpenGL,
Performer, OpenSG, VTK…ExtensívelComo disse o Stroustroup: “C makes it
easy for you to shoot yourself in the foot. C++ makes that harder, but when you do, it blows away your whole leg”
24
ReferênciasReferências
VRJuggler: http://www.vrjuggler.org CAVElib: http://www.cavelib.com Syzygy: http://www.isl.uiuc.edu/ClusteredVR/
ClusteredVR.htm FreeVR: http://www.freevr.org/ Chromium: http://chromium.sourceforge.net DICElib: http://www.lsi.usp.br/~brunobg CAVEQuake: http://brighton.ncsa.uiuc.edu/~prajlich/