VRJuggler

Preview:

DESCRIPTION

VRJuggler. Bruno Barberi Gnecco Rita de Fátima Rodrigues. Realidade Virtual Prof. Marcelo Knörich Zuffo. Programaçã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 - PowerPoint PPT Presentation

Citation preview

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 (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 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/