Download ppt - VRJuggler

Transcript
Page 1: VRJuggler

1

VRJugglerVRJuggler

Bruno Barberi Gnecco

Rita de Fátima Rodrigues

Realidade Virtual

Prof. Marcelo Knörich Zuffo

Page 2: VRJuggler

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

Page 3: VRJuggler

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”

Page 4: VRJuggler

4

Aplicativos objetoAplicativos objeto

Modificações em tempo de execuçãoBaixa interdependênciaInterfaces estáveis

Page 5: VRJuggler

5

Desenvolvimento de Desenvolvimento de programasprogramas

Programa é um objeto:class userApp : public vrj::App {public:init();preFrame();postFrame();...

}

Page 6: VRJuggler

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

Page 7: VRJuggler

7

Estrutura de classesEstrutura de classes

vjGlAppdrawcontextInitcontextClose

vjApp

initapiInitexit…

userOglAppInitapiInitdrawpreFramepostFrame

Page 8: VRJuggler

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

Page 9: VRJuggler

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().

Page 10: VRJuggler

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.

Page 11: VRJuggler

11

Estudo comparativoEstudo comparativo

Outras soluções semelhantes existem– CAVElib– Syzygy– Chromium– FreeVR– DICElib

Page 12: VRJuggler

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

Page 13: VRJuggler

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

Page 14: VRJuggler

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

Page 15: VRJuggler

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

Page 16: VRJuggler

16

SyzygySyzygy

High-End VR on Whatever Random Crap “You have Lying Around”

Desenvolvida para clusters. Tile renderingOpen sourceUniversidade de

Illinois at Urbana

Page 17: VRJuggler

17

Syzygy IISyzygy II

Implementa um “SO distribuído”: PhleetInstalação complexaSuporte a inputImplementa scene graph e som 3D

Page 18: VRJuggler

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?)

Page 19: VRJuggler

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

Page 20: VRJuggler

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.

Page 21: VRJuggler

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]

Page 22: VRJuggler

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

Page 23: VRJuggler

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”

Page 24: VRJuggler

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/