1
2
3Introdução à utilizaçãode openFrameworksparao desenvolvimento deaplicações de RVAClaudio Kirner1 and Christopher S. Cerqu...
Autores:Christopher Shneider Cerqueira – é graduado na Universidade Federal de Itajubá epesquisador da área de realidade v...
http://imasters.com.br/artigo/9817/software/analise-do-teste-de-software-parte-02/5
6
http://lang-index.sourceforge.net/7
8
Overview• Atividades de 4h• Você vai aprender– Conceitos básicos de design.– openFrameworks básico.• Estrutura de arquivos...
INTRODUÇÃOExperiência, interação, desenvolvimento criativo10
“The product is no longer thebasis of value. The experienceis.”Venkat RamaswamyThe Future of Competition11
Valor de uma boa experiência12
IHC – Interação Homem-Computador• Estudo da interação entre pessoas e computadores.• Onde são formadas as experiências.13
Mas quem desenvolve experiência?• UX Developer – User Experience– A pessoa que caminha entra o design e atecnologia.http:/...
Interação15Texto, som,cores, visual,mecânico oufisico.InterfaceMensagensUsuário Sistema
Exemplo:• Usabilidade:1. Facilidade deaprendizado2. Eficiência3. Facilidade dememorização4. Erros5. Satisfação subjetiva16...
3 níveisLógico: Resolvem, solucionam,facilitam.Emocional: Satisfazemnecessidades e desejosafetivos.Visceral: resolvem ques...
Espera.... Visceral?18
19
ProcessingAdobe FlashUnityCinderopenFrameworks20
OPENFRAMEWOKSO que é. Requisitos. Onde encontrar. Expansões. Exemplos.21
openframeworks.cc22
oF• Criado para artistas e designers• Desenvolvido por: Zach Liberman, TheoWatson, Artuno Castro e Chris O’Shea• Proposta:...
utilizar oF quando:• O projeto renderiza muitos gráficos 3D, e/ou;• Utilizar muita visão computacional, e/ou;• Controlar e...
Libs no pacote padrão• OpenGL, GLEW, GLUT, libtess2 e cairo paragráficos.• rtAudio, PortAudio ou FMOD e Kiss FFT paraentra...
C++ Portável!!!!26
Página Principal – openframeworks.cc27
Requisitos (deste tutorial)VC2010EoFofxARToolKitplus28
Visual Studio C++ 2010 Express29
1230
Procedimento de teste1. Descompacte a pasta do oF2. Entre na pasta exemplos3. Escolha algum (dos 100)4. Entre na solução (...
• Descompactar• Entrar na Solução32
• Release e compilar1233
• Resultado de compilação esperado34
• Funcionamento do exemplo pointPicker35
Componentes da Comunidade• http://ofxaddons.com/36
Expansões• Animation: animação de elementos simples.• Bridges: bridges são formas de adicionar elementos de outros framewo...
ofxARToolKitPlus• fishkingsin38
CASO 1: O EXEMPLO VAZIO!o exemplo vazio para explorar a estrutura de arquivos do oF, a utilizaçãodo gerador automático e a...
Estrutura de Arquivos40
Level Easy: Gerador Automático41
Escolhendo expansões42
Estrutura lógica do projeto noVC2010E43
main.cpp ... Onde tudo começa#include "ofMain.h"#include "testApp.h"#include "ofAppGlutWindow.h"//========================...
testApp.h ... OO classe principal#pragma once#include "ofMain.h"class testApp : public ofBaseApp{public:void setup();void ...
testApp.cpp ... Métodos.#include "testApp.h"void testApp::setup(){ }void testApp::update(){ }void testApp::draw(){ }void t...
Compilando47
Modificando o básico// testApp.cppvoid testApp::setup(){mensagem = "Hello SVR2013!!!";raio = 0;}void testApp::draw(){ofSet...
CASO 2: MODELOS, CÂMERA EAÇÃO!exemplo com modelos 3D para explorar a utilização de bibliotecas demodelos 3D e de controle ...
• Gerar o projeto no Gerador Automático,colocando o add-on ofxAssimp.– Inserindo modelos– Manipulação de câmera50
Inserindo Modelos• biblioteca Assimp• Open Asset Import Library– C++, sob licença BSD (C# e Python)– Carrega vários format...
AssimpViewer52
Lets code ... No testApp.h// testApp.h#pragma once#include "ofxAssimpModelLoader.h"#include "ofMain.h"class testApp : publ...
Copiar o modelo• Copiar o modelo:– astroBoy_walk.dae– boy_10.tga (textura)• do exemplo<of>examplesaddonsassimpExamplebinda...
Resultado55
Manipulando o modelo - ofEasyCam• Componente de manipulação de câmera.56
Lets code...// testApp.h#pragma once#include "ofxAssimpModelLoader.h"#include "ofMain.h"class testApp : public ofBaseApp{....
CASO 3: AUMENTANDO AREALIDADE!exemplo com RA para explorar a utilização de add-ons adicionais.58
Realidade Aumentada59
60
Definição atualUma definição mais atualizada é: realidadeaumentada é uma interfacebaseada nasobreposição de informações vi...
Informação virtualInteração Naturaldispositivos tecnológicos62
63
FrameworksMarcador• ARToolKit (C) – 90´s• NYARToolKit (Java, C#, C++,Android)• AndAR (Android)• FLARToolKit (AS3)Sem marca...
Ferramentas de AutoriabasAR FLARAS65
MarcadoresARToolKit• HITLab• Compara templates.• Template marker detection• Mais lento• Inviável em SW embarcado.ARToolKit...
ARToolKit67
ARToolKitPlus68
69
70
Voltando ao mundo real• openFrameworks + ARToolKitPlus.• Add-on ofxARToolKitPlus.• Descompactá-lo e salvar dentro de<of>/a...
• Utilizar o gerador automático e gerar com osseguintes add-nos:• ofxARToolKitPlus• ofxOpenCv (necessário para oofxARToolK...
Ajustando o projeto - caminhos1. Configuration Properties  LinkerGeneralAdditional Library Directories einclua o caminh...
Ajustando o projeto - lib1. Configuration Properties  Linker Input Additional Dependencies incluir a lib:ARToolKitPlus....
Lets code...// testApp.cpp#pragma once#include "ofMain.h"#include "ofxOpenCv.h" //Cabeçalho do OpenCV#include "ofxARToolki...
Configurando – testApp::setup()//--------------------------------------------------------------void testApp::setup(){ofSet...
Rastreio - testApp::update()//--------------------------------------------------------------void testApp::update(){vidGrab...
Exibindo - testApp::draw() – p1//--------------------------------------------------------------void testApp::draw(){ofSetC...
Exibindo - testApp::draw() – p2for(int i=0; i<numDetected; i++) { // marcadores encontradosartk.applyModelMatrix(i); //mat...
Alterando o threshold -testApp::keyPressed(int key)//--------------------------------------------------------------void te...
Resultado esperado81
Adicionando conteúdo• Adicionar o modelo viaofxAssimpModelLoader• Reutilizar o modelo do exemplo anterior.82
Só adicionar o Assimp#pragma once#include "ofMain.h"#include "ofxOpenCv.h"#include "ofxARToolkitPlus.h"#include "ofxAssimp...
Setup e Draw...• //--------------------------------------------------------------• void testApp::setup(){• ...• if( !model...
//--------------------------------------------------------------void testApp::draw(){// ARTK 3D...for(int i=0; i<numDetect...
86
FINALIZANDO87
• Apresentar um ferramental, de desenvolvimentomulti-plataforma baseado em C++, chamadoopenFrameworks.• Apresentou-se dois...
• Como contribuição, esperamos que esteferramental auxilie no desenvolvimento deaplicações mais criativas e de desenvolvim...
• Como sugestão de livro e aprofundamento,aconselhamos o livro ProgrammingInteractivity da O´Reilly e os tutoriais do site...
91Introdução à utilização deopenFrameworks parao desenvolvimento de aplicaçõesde RVAClaudio Kirner1 and Christopher S. Cer...
92
Upcoming SlideShare
Loading in …5
×

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

1,073 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
1,073
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. 1
  2. 2. 2
  3. 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. 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. 5. http://imasters.com.br/artigo/9817/software/analise-do-teste-de-software-parte-02/5
  6. 6. 6
  7. 7. http://lang-index.sourceforge.net/7
  8. 8. 8
  9. 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. 10. INTRODUÇÃOExperiência, interação, desenvolvimento criativo10
  11. 11. “The product is no longer thebasis of value. The experienceis.”Venkat RamaswamyThe Future of Competition11
  12. 12. Valor de uma boa experiência12
  13. 13. IHC – Interação Homem-Computador• Estudo da interação entre pessoas e computadores.• Onde são formadas as experiências.13
  14. 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. 15. Interação15Texto, som,cores, visual,mecânico oufisico.InterfaceMensagensUsuário Sistema
  16. 16. Exemplo:• Usabilidade:1. Facilidade deaprendizado2. Eficiência3. Facilidade dememorização4. Erros5. Satisfação subjetiva16Meta-MensagensUsuário Sistema
  17. 17. 3 níveisLógico: Resolvem, solucionam,facilitam.Emocional: Satisfazemnecessidades e desejosafetivos.Visceral: resolvem questõesfundamentais, semconsciência.Impulso.17
  18. 18. Espera.... Visceral?18
  19. 19. 19
  20. 20. ProcessingAdobe FlashUnityCinderopenFrameworks20
  21. 21. OPENFRAMEWOKSO que é. Requisitos. Onde encontrar. Expansões. Exemplos.21
  22. 22. openframeworks.cc22
  23. 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. 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. 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. 26. C++ Portável!!!!26
  27. 27. Página Principal – openframeworks.cc27
  28. 28. Requisitos (deste tutorial)VC2010EoFofxARToolKitplus28
  29. 29. Visual Studio C++ 2010 Express29
  30. 30. 1230
  31. 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. 32. • Descompactar• Entrar na Solução32
  33. 33. • Release e compilar1233
  34. 34. • Resultado de compilação esperado34
  35. 35. • Funcionamento do exemplo pointPicker35
  36. 36. Componentes da Comunidade• http://ofxaddons.com/36
  37. 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. 38. ofxARToolKitPlus• fishkingsin38
  39. 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. 40. Estrutura de Arquivos40
  41. 41. Level Easy: Gerador Automático41
  42. 42. Escolhendo expansões42
  43. 43. Estrutura lógica do projeto noVC2010E43
  44. 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. 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. 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. 47. Compilando47
  48. 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. 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. 50. • Gerar o projeto no Gerador Automático,colocando o add-on ofxAssimp.– Inserindo modelos– Manipulação de câmera50
  51. 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. 52. AssimpViewer52
  53. 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. 54. Copiar o modelo• Copiar o modelo:– astroBoy_walk.dae– boy_10.tga (textura)• do exemplo<of>examplesaddonsassimpExamplebindata54
  55. 55. Resultado55
  56. 56. Manipulando o modelo - ofEasyCam• Componente de manipulação de câmera.56
  57. 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. 58. CASO 3: AUMENTANDO AREALIDADE!exemplo com RA para explorar a utilização de add-ons adicionais.58
  59. 59. Realidade Aumentada59
  60. 60. 60
  61. 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. 62. Informação virtualInteração Naturaldispositivos tecnológicos62
  63. 63. 63
  64. 64. FrameworksMarcador• ARToolKit (C) – 90´s• NYARToolKit (Java, C#, C++,Android)• AndAR (Android)• FLARToolKit (AS3)Sem marcador• OpenCV - Multiplataforma• PTAMM (C++)64
  65. 65. Ferramentas de AutoriabasAR FLARAS65
  66. 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. 67. ARToolKit67
  68. 68. ARToolKitPlus68
  69. 69. 69
  70. 70. 70
  71. 71. Voltando ao mundo real• openFrameworks + ARToolKitPlus.• Add-on ofxARToolKitPlus.• Descompactá-lo e salvar dentro de<of>/addons• Renomear, retirando o sufixo -master71
  72. 72. • Utilizar o gerador automático e gerar com osseguintes add-nos:• ofxARToolKitPlus• ofxOpenCv (necessário para oofxARToolKitPlus)• ofxAssimpModelLoader72
  73. 73. Ajustando o projeto - caminhos1. Configuration Properties  LinkerGeneralAdditional Library Directories einclua o caminho para a biblioteca, no caso:......addonsofxARtoolkitPluslibsARToolKitPluslibwin3273
  74. 74. Ajustando o projeto - lib1. Configuration Properties  Linker Input Additional Dependencies incluir a lib:ARToolKitPlus.lib74
  75. 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. 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. 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. 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. 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. 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. 81. Resultado esperado81
  82. 82. Adicionando conteúdo• Adicionar o modelo viaofxAssimpModelLoader• Reutilizar o modelo do exemplo anterior.82
  83. 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. 84. Setup e Draw...• //--------------------------------------------------------------• void testApp::setup(){• ...• if( !model.loadModel("astroBoy_walk.dae", false) ) // Abre o arquivo• ofSystemAlertDialog("Erro em carregar arquivo");• }84
  85. 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. 86
  87. 87. FINALIZANDO87
  88. 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. 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. 90. • Como sugestão de livro e aprofundamento,aconselhamos o livro ProgrammingInteractivity da O´Reilly e os tutoriais do sitedo openFrameworks.90
  91. 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. 92

×