Your SlideShare is downloading. ×
0
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Introdução à utilização de openFrameworks para  o desenvolvimento de aplicações de RVA
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introdução à utilização de openFrameworks para o desenvolvimento de aplicações de RVA

589

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
589
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1
  • 2. 2
  • 3. 3Introdução à utilizaçãode openFrameworksparao desenvolvimento deaplicações de RVAClaudio Kirner1 and Christopher S. Cerqueira121Federal University of Itajubá – Universidade Federal de Itajubá (UNIFEI)2National Institute for Space Research – Instituto Nacional de Pesquisas Espaciais (INPE)1ckirner@gmail.com ,2christophercerqueira@gmail.com1http://realidadevirtual.com.br/, 2http://cscerqueira.com.bropenFrameworks
  • 4. Autores:Christopher Shneider Cerqueira – é graduado na Universidade Federal de Itajubá epesquisador da área de realidade virtual e aumentada desde 2009, atuando nodesenvolvimento de aplicações baseadas em ARToolKit, para o desenvolvimento deferramentas de autoria de realidade aumentada com cross-reality. É um dosdesenvolvedores da ferramenta de autoria comportamental basAR. Atualmente é alunode pós-graduação do INPE desenvolvendo um sistema de simulação de satélitesdistribuídos com visualização em realidade virtual.Claudio Kirner – é graduado em Engenharia Elétrica pela Universidade de São Paulo(1973), mestre em Engenharia Eletrônica pelo Instituto Tecnológico de Aeronáutica (1978),doutor em Engenharia de Sistemas e Computação pela Universidade Federal do Rio deJaneiro (1986) e Pós-doutor pela University of Colorado at Colorado Springs – UCCS (1993-1995). Atualmente é Professor Adjunto na Universidade Federal de Itajubá (UNIFEI). Temexperiência em Realidade Virtual e Realidade Aumentada, Interação Humano-Computador,Ambientes Colaborativos e educação à Distância. Coordenou o I Workshop de RealidadeVirtual, em 1997, e o I Workshop de Realidade Aumentada, em 2004, e outrossubsequentes. Orientou 30 alunos de mestrado e 8 de doutorado; coordenou ProjetosCNPq, FAPESP, RHAE e FAPEMIG; publicou cerca de 270 artigos científicos e 40 livros ecapítulos.Dúvidas: christophercerqueira@gmail.com 4
  • 5. http://imasters.com.br/artigo/9817/software/analise-do-teste-de-software-parte-02/5
  • 6. 6
  • 7. http://lang-index.sourceforge.net/7
  • 8. 8
  • 9. Overview• Atividades de 4h• Você vai aprender– Conceitos básicos de design.– openFrameworks básico.• Estrutura de arquivos.• Compilar exemplos.• Como criar um projeto básico e modificá-lo.• Utilizar complemento de biblioteca de modelos.• Utilizar complemento de biblioteca de RA.9
  • 10. INTRODUÇÃOExperiência, interação, desenvolvimento criativo10
  • 11. “The product is no longer thebasis of value. The experienceis.”Venkat RamaswamyThe Future of Competition11
  • 12. Valor de uma boa experiência12
  • 13. IHC – Interação Homem-Computador• Estudo da interação entre pessoas e computadores.• Onde são formadas as experiências.13
  • 14. Mas quem desenvolve experiência?• UX Developer – User Experience– A pessoa que caminha entra o design e atecnologia.http://blog.alexandremagno.net/2013/02/o-que-seria-um-ux-developer/14
  • 15. Interação15Texto, som,cores, visual,mecânico oufisico.InterfaceMensagensUsuário Sistema
  • 16. Exemplo:• Usabilidade:1. Facilidade deaprendizado2. Eficiência3. Facilidade dememorização4. Erros5. Satisfação subjetiva16Meta-MensagensUsuário Sistema
  • 17. 3 níveisLógico: Resolvem, solucionam,facilitam.Emocional: Satisfazemnecessidades e desejosafetivos.Visceral: resolvem questõesfundamentais, semconsciência.Impulso.17
  • 18. Espera.... Visceral?18
  • 19. 19
  • 20. ProcessingAdobe FlashUnityCinderopenFrameworks20
  • 21. OPENFRAMEWOKSO que é. Requisitos. Onde encontrar. Expansões. Exemplos.21
  • 22. openframeworks.cc22
  • 23. oF• Criado para artistas e designers• Desenvolvido por: Zach Liberman, TheoWatson, Artuno Castro e Chris O’Shea• Proposta: Arrumar a falta de comunicaçãoentre diversas bibliotecas em C++, e permitirportabilidade.• Escrita em C++• Licença: MIT (educacional e venda)23
  • 24. utilizar oF quando:• O projeto renderiza muitos gráficos 3D, e/ou;• Utilizar muita visão computacional, e/ou;• Controlar equipamentos, como, por exemplo,o ARDUINO.24
  • 25. Libs no pacote padrão• OpenGL, GLEW, GLUT, libtess2 e cairo paragráficos.• rtAudio, PortAudio ou FMOD e Kiss FFT paraentrada, saída e análise de áudio.• FreeType para fontes.• FreeImage para salvar e carregar imagens.• Quicktime e videoInput para playback e aquisiçãode vídeo.• Poco, que contém uma variedade de utilidades.25
  • 26. C++ Portável!!!!26
  • 27. Página Principal – openframeworks.cc27
  • 28. Requisitos (deste tutorial)VC2010EoFofxARToolKitplus28
  • 29. Visual Studio C++ 2010 Express29
  • 30. 1230
  • 31. Procedimento de teste1. Descompacte a pasta do oF2. Entre na pasta exemplos3. Escolha algum (dos 100)4. Entre na solução (.sln)  Abrir no VC2010E5. Escolha Release e depois Build31
  • 32. • Descompactar• Entrar na Solução32
  • 33. • Release e compilar1233
  • 34. • Resultado de compilação esperado34
  • 35. • Funcionamento do exemplo pointPicker35
  • 36. Componentes da Comunidade• http://ofxaddons.com/36
  • 37. Expansões• Animation: animação de elementos simples.• Bridges: bridges são formas de adicionar elementos de outros frameworks,adaptando a interface de dados para o oF.• Computer Vision: rotinas de rastreio, usando openCV e Kinect.• Graphics: rotinas para renderizar elementos na tela.• GUI: componentes para criar interfaces com usuário.• Hardware Interface: rotinas de acesso a vários hardwares.• iOS: rotinas específicas para desenvolvimento e utilização dos recursos do iOS.• Machine Learning: rotinas de inteligência artificial.• Physics: rotinas de processamento de física, colisão, etc.• Sound: rotinas e wrappers de bibliotecas para tratamento e execução de áudio.• Typography: rotinas para manipulação de texto.• Utilities: rotinas diversas para manipulação com o computador, sistemaoperacional e outros recursos.• Video/Camera: rotinas e wrappers de bibliotecas para tratamento e execução devídeo e dados de câmera (incluindo Kinect e openNI).• Web/Networking: rotinas para interconexão de sistemas, HTTP, FTP, JSON, SSL, etc. 37
  • 38. ofxARToolKitPlus• fishkingsin38
  • 39. CASO 1: O EXEMPLO VAZIO!o exemplo vazio para explorar a estrutura de arquivos do oF, a utilizaçãodo gerador automático e a organização do código.39
  • 40. Estrutura de Arquivos40
  • 41. Level Easy: Gerador Automático41
  • 42. Escolhendo expansões42
  • 43. Estrutura lógica do projeto noVC2010E43
  • 44. main.cpp ... Onde tudo começa#include "ofMain.h"#include "testApp.h"#include "ofAppGlutWindow.h"//========================================================================int main( ){ofAppGlutWindow window;ofSetupOpenGL(&window, 1024,768, OF_WINDOW);// <--- setup the GL context// this kicks off the running of my app// can be OF_WINDOW or OF_FULLSCREEN// pass in width and height too:ofRunApp( new testApp());}44
  • 45. testApp.h ... OO classe principal#pragma once#include "ofMain.h"class testApp : public ofBaseApp{public:void setup();void update();void draw();void keyPressed (int key);void keyReleased(int key);void mouseMoved(int x, int y );void mouseDragged(int x, int y, int button);void mousePressed(int x, int y, int button);void mouseReleased(int x, int y, int button);void windowResized(int w, int h);void dragEvent(ofDragInfo dragInfo);void gotMessage(ofMessage msg);};45
  • 46. testApp.cpp ... Métodos.#include "testApp.h"void testApp::setup(){ }void testApp::update(){ }void testApp::draw(){ }void testApp::keyPressed(int key){ }void testApp::keyReleased(int key){ }void testApp::mouseMoved(int x, int y ){ }void testApp::mouseDragged(int x, int y, int button){ }void testApp::mousePressed(int x, int y, int button){ }void testApp::mouseReleased(int x, int y, int button){ }void testApp::windowResized(int w, int h){ }void testApp::gotMessage(ofMessage msg){ }void testApp::dragEvent(ofDragInfo dragInfo){ }46
  • 47. Compilando47
  • 48. Modificando o básico// testApp.cppvoid testApp::setup(){mensagem = "Hello SVR2013!!!";raio = 0;}void testApp::draw(){ofSetColor(ofColor::blue);ofCircle(x_i,y_i,raio);ofSetColor(ofColor::red);ofDrawBitmapString(mensagem,mouseX,mouseY);}// testApp.cppvoid testApp::mouseDragged(int x, int y, intbutton){raio = ofDist(x_i,y_i,x,y);}void testApp::mousePressed(int x, int y, intbutton){x_i = x;y_i = y;}void testApp::mouseReleased(int x, int y, intbutton){raio = ofDist(x_i,y_i,x,y);}// testApp.h...string mensagem;int x_i,y_i;float raio;...48
  • 49. CASO 2: MODELOS, CÂMERA EAÇÃO!exemplo com modelos 3D para explorar a utilização de bibliotecas demodelos 3D e de controle de câmera.49
  • 50. • Gerar o projeto no Gerador Automático,colocando o add-on ofxAssimp.– Inserindo modelos– Manipulação de câmera50
  • 51. Inserindo Modelos• biblioteca Assimp• Open Asset Import Library– C++, sob licença BSD (C# e Python)– Carrega vários formatos: Collada, Blender, 3DSMax, AutoCad, Ogre, Quakes, Valve, Unreal eDirectX X– No site do Assimp, tem um viewer que facilitadescobrir se vai funcionar o modelo na biblioteca:AssimpViewer51
  • 52. AssimpViewer52
  • 53. Lets code ... No testApp.h// testApp.h#pragma once#include "ofxAssimpModelLoader.h"#include "ofMain.h"class testApp : public ofBaseApp{// Não apagar o que já tinhaofxAssimpModelLoader model;};// testApp.cppvoid testApp::setup(){ofBackground(50, 0);if( !model.loadModel("astroBoy_walk.dae", false) )ofSystemAlertDialog("Erro no arquivo");glEnable(GL_DEPTH_TEST);glShadeModel(GL_SMOOTH);}void testApp::draw(){ofSetColor(255);ofPushMatrix();ofTranslate(ofGetWidth()/2,ofGetHeight()/2+100,0);model.drawFaces();ofPopMatrix();}53
  • 54. Copiar o modelo• Copiar o modelo:– astroBoy_walk.dae– boy_10.tga (textura)• do exemplo<of>examplesaddonsassimpExamplebindata54
  • 55. Resultado55
  • 56. Manipulando o modelo - ofEasyCam• Componente de manipulação de câmera.56
  • 57. Lets code...// testApp.h#pragma once#include "ofxAssimpModelLoader.h"#include "ofMain.h"class testApp : public ofBaseApp{...ofxAssimpModelLoader model;ofEasyCam cam;}; // testApp.cppvoid testApp::draw(){ofSetColor(255);cam.begin();model.drawFaces();cam.end();}57
  • 58. CASO 3: AUMENTANDO AREALIDADE!exemplo com RA para explorar a utilização de add-ons adicionais.58
  • 59. Realidade Aumentada59
  • 60. 60
  • 61. Definição atualUma definição mais atualizada é: realidadeaumentada é uma interfacebaseada nasobreposição de informações virtuais geradas porcomputador (envolvendo imagens estáticas edinâmicas, sons espaciais e sensações hápticas)com o ambiente físico do usuário, percebidaatravés de dispositivos tecnológicos e usando asinterações naturais do usuário, no mundo físico.(KIRNER 2011)61
  • 62. Informação virtualInteração Naturaldispositivos tecnológicos62
  • 63. 63
  • 64. FrameworksMarcador• ARToolKit (C) – 90´s• NYARToolKit (Java, C#, C++,Android)• AndAR (Android)• FLARToolKit (AS3)Sem marcador• OpenCV - Multiplataforma• PTAMM (C++)64
  • 65. Ferramentas de AutoriabasAR FLARAS65
  • 66. MarcadoresARToolKit• HITLab• Compara templates.• Template marker detection• Mais lento• Inviável em SW embarcado.ARToolKitPlus• Graz University ofTechnology• Compara códigos• ID-Encoded markerdetection• Mais rápido• Bom para SW embarcado.66
  • 67. ARToolKit67
  • 68. ARToolKitPlus68
  • 69. 69
  • 70. 70
  • 71. Voltando ao mundo real• openFrameworks + ARToolKitPlus.• Add-on ofxARToolKitPlus.• Descompactá-lo e salvar dentro de<of>/addons• Renomear, retirando o sufixo -master71
  • 72. • Utilizar o gerador automático e gerar com osseguintes add-nos:• ofxARToolKitPlus• ofxOpenCv (necessário para oofxARToolKitPlus)• ofxAssimpModelLoader72
  • 73. Ajustando o projeto - caminhos1. Configuration Properties  LinkerGeneralAdditional Library Directories einclua o caminho para a biblioteca, no caso:......addonsofxARtoolkitPluslibsARToolKitPluslibwin3273
  • 74. Ajustando o projeto - lib1. Configuration Properties  Linker Input Additional Dependencies incluir a lib:ARToolKitPlus.lib74
  • 75. Lets code...// testApp.cpp#pragma once#include "ofMain.h"#include "ofxOpenCv.h" //Cabeçalho do OpenCV#include "ofxARToolkitPlus.h" //Cabeçalho do ARToolKitPlusclass testApp : public ofBaseApp{...int width, height; // Tamanho da janela da câmeraofVideoGrabber vidGrabber; // Componente do oF que pega a câmera.ofxARToolkitPlus artk; // Instância do ARToolKitPlusint threshold; // Threshold da relação preto/brancoofxCvColorImage colorImage; //imagem capturada pela câmeraofxCvGrayscaleImage grayImage; //imagem em tons de cinza (mais rápida)ofxCvGrayscaleImage grayThres;//imagem com threshold antes de ir pro artk};75
  • 76. Configurando – testApp::setup()//--------------------------------------------------------------void testApp::setup(){ofSetWindowShape(1280,480); // Ajusta o tamanho da aplicaçãowidth = 640; height = 480; // largura e altura da imagem da câmeravidGrabber.initGrabber(width, height); // reserva buffer da câmeracolorImage.allocate(width, height); // reserva imagem coloridagrayImage.allocate(width, height); // reserva imagem monograyThres.allocate(width, height); // reserva imagem ajustadaartk.setup(width, height); // inicia o ARToolKitPlusthreshold = 85; // threshold para a imagem ajustadaartk.setThreshold(threshold); // informa ao ARToolKitPlus que o ajusteé externo}76
  • 77. Rastreio - testApp::update()//--------------------------------------------------------------void testApp::update(){vidGrabber.grabFrame();// Pega frame da câmerabool bNewFrame = vidGrabber.isFrameNew();// é um frame novoif(bNewFrame) { // se um frame novo/pega os pixels do buffer da câmera e armazenacolorImage.setFromPixels(vidGrabber.getPixels(), width, height);grayImage = colorImage; //converte a imagem para mono//Como queremos testar o threshold temos que gerar essa imagemgrayThres = grayImage;grayThres.threshold(threshold);//Passa para o ARToolKitPlus a imagem monocromáticaartk.update(grayImage.getPixels());}} 77
  • 78. Exibindo - testApp::draw() – p1//--------------------------------------------------------------void testApp::draw(){ofSetColor(ofColor::white); // inicia a cor dos objetos como brancacolorImage.draw(0, 0); // exibe a imagem capturada coloridagrayThres.draw(640, 0); // exibe a imagem adaptadaartk.draw(640, 0); // Esta função exibe a posição e etiqueta omarcador// ARTK 3Dartk.applyProjectionMatrix(); // primeiro passo é aplicar a matriz deprojeção da cameraint numDetected = artk.getNumDetectedMarkers(); //detectar os marcadoresofEnableAlphaBlending();//habilitar a transparência78
  • 79. Exibindo - testApp::draw() – p2for(int i=0; i<numDetected; i++) { // marcadores encontradosartk.applyModelMatrix(i); //matriz de perspectiva do marcador//Local onde colocar o conteúdo 3D do marcador// neste exemplo é uma pilha de retângulos.ofNoFill();ofEnableSmoothing();ofSetColor(255, 255, 0, 50);for(int i=0; i<10; i++) {ofRect(-25, -25, 50, 50);ofTranslate(0, 0, i*1);}}}79
  • 80. Alterando o threshold -testApp::keyPressed(int key)//--------------------------------------------------------------void testApp::keyPressed(int key){if(key == OF_KEY_UP) {artk.setThreshold(++threshold); // aumenta o valor do threshold} else if(key == OF_KEY_DOWN) {artk.setThreshold(--threshold); // diminui o valor do threshold} else if(key == s) {vidGrabber.videoSettings(); // chama a configuração da câmera}}80
  • 81. Resultado esperado81
  • 82. Adicionando conteúdo• Adicionar o modelo viaofxAssimpModelLoader• Reutilizar o modelo do exemplo anterior.82
  • 83. Só adicionar o Assimp#pragma once#include "ofMain.h"#include "ofxOpenCv.h"#include "ofxARToolkitPlus.h"#include "ofxAssimpModelLoader.h"class testApp : public ofBaseApp{...ofxCvGrayscaleImage grayThres;ofxAssimpModelLoader model;};83
  • 84. Setup e Draw...• //--------------------------------------------------------------• void testApp::setup(){• ...• if( !model.loadModel("astroBoy_walk.dae", false) ) // Abre o arquivo• ofSystemAlertDialog("Erro em carregar arquivo");• }84
  • 85. //--------------------------------------------------------------void testApp::draw(){// ARTK 3D...for(int i=0; i<numDetected; i++) { // marcadores encontrados...//Local onde colocar o conteúdo 3D do marcador//pilha de retângulos.// Modelo 3DofSetColor(255); // Configura a cor do objetoofPushMatrix(); // Abre o contextoglEnable(GL_DEPTH_TEST); // habilita profundidadeofScale(0.1,0.1,0.1); // ajusta escalaofRotateX(-90); // rotaciona 90 grausmodel.drawFaces(); / desenha as facesglDisable(GL_DEPTH_TEST); // desabilita profundidadeofPopMatrix(); // fecha o contexto}}85
  • 86. 86
  • 87. FINALIZANDO87
  • 88. • Apresentar um ferramental, de desenvolvimentomulti-plataforma baseado em C++, chamadoopenFrameworks.• Apresentou-se dois casos introdutórios, paraexplicar o framework e sua estrutura e o uso deelementos adicionais, no caso o uso da bibliotecaAssimp, chamados add-on, finalizando com umexemplo de construção de ambientes derealidade aumentada utilizando uma bibliotecasimilar ao ARToolKitPlus.88
  • 89. • Como contribuição, esperamos que esteferramental auxilie no desenvolvimento deaplicações mais criativas e de desenvolvimentoveloz, com:– Codificação C++ portável– Facilidade de acesso a hardware– Múltiplos componentes prontos disponíveis pelacomunidade– Facilidade de acesso ao disco– Facilidade de comunicação– Facilidade de uso de áudio e vídeo.89
  • 90. • Como sugestão de livro e aprofundamento,aconselhamos o livro ProgrammingInteractivity da O´Reilly e os tutoriais do sitedo openFrameworks.90
  • 91. 91Introdução à utilização deopenFrameworks parao desenvolvimento de aplicaçõesde RVAClaudio Kirner1 and Christopher S. Cerqueira121Federal University of Itajubá – Universidade Federal de Itajubá (UNIFEI)2National Institute for Space Research – Instituto Nacional de Pesquisas Espaciais (INPE)1ckirner@gmail.com ,2christophercerqueira@gmail.com1http://realidadevirtual.com.br/, 2http://cscerqueira.com.brDúvidas: christophercerqueira@gmail.com
  • 92. 92

×