1
VRJugglerVRJuggler
Bruno Barberi Gnecco
Rita de Fátima Rodrigues
Realidade Virtual
Prof. 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 desenvolvimento
Sem 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 objeto
Modificaçõ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 objetos
Derivação de classes permite minimizar trabalho
Programa 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 aplicativos
Portar 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
NetJugglerNetJuggler
Layer 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 comparativo
Outras soluções semelhantes existem– CAVElib– Syzygy– Chromium– FreeVR– DICElib
12
CAVElibCAVElib
Primeira 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 poderoso
Calcula janelas e projeção perspectiva automaticamente.
Compatível com OpenGL e PerformerAbstração de inputSuporta multiprocessamento
14
Exemplo de CAVElibExemplo de CAVElib
main(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
SyzygySyzygy
High-End VR on Whatever Random Crap “You have Lying Around”
Desenvolvida para clusters. Tile renderingOpen sourceUniversidade de
Illinois at Urbana
17
Syzygy IISyzygy II
Implementa um “SO distribuído”: PhleetInstalação complexaSuporte a inputImplementa scene graph e som 3D
18
ChromiumChromium
Soluçã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 II
Integraçã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/
Recommended