1 VRJuggler Bruno Barberi Gnecco Rita de Fátima Rodrigues Realidade Virtual Prof. Marcelo Knörich...

Post on 07-Apr-2016

218 views 0 download

Transcript of 1 VRJuggler Bruno Barberi Gnecco Rita de Fátima Rodrigues Realidade Virtual Prof. Marcelo Knörich...

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 (paul@visbox.com) 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/