Baixe o app para aproveitar ainda mais
Prévia do material em texto
VTK - Visualization Toolkit Prof. Roge´rio Eduardo da Silva 2005 Suma´rio 1 Conceitos Ba´sicos 2 1.1 O que e´ o VTK? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Instanciamento de Objetos com VTK . . . . . . . . . . . . . . . . . . . 3 1.2 Pipeline de Visualizac¸a˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Surface Rendering e Volume Rendering . . . . . . . . . . . . . . . . . . 4 1.3 Instalando o VTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.1 A partir dos Arquivos Fontes . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.2 A partir dos Arquivos Bina´rios Pre´-Compilados . . . . . . . . . . . . . 6 1.4 Criando a Primeira Aplicac¸a˜o VTK . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.1 Desenvolvendo uma Aplicac¸a˜o Console . . . . . . . . . . . . . . . . . . 6 2 Transformac¸o˜es Geome´tricas 11 3 Rendering 12 4 Modelagem Geome´trica 13 5 Animac¸o˜es Computacionais 14 i Lista de Figuras 1.1 Pipeline de Visualizac¸a˜o do VTK . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Tipos de Rendering - (a) Surface Rendering (b) Volume Rendering . . . . . . . 4 1.3 Interface CMake 2.2 beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 Assistente de Instalac¸a˜o para Windows . . . . . . . . . . . . . . . . . . . . . . 6 1.5 Primeira Aplicac¸a˜o com VTK . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.6 Criando um Projeto Console em MSVC 6.0 . . . . . . . . . . . . . . . . . . . . 9 1.7 Criando um novo arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.8 Configurac¸o˜es de Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ii Apresentac¸a˜o Esta apostila foi elaborada para servir como material de apoio para desenvolvimento dos trabalhos pra´ticos nas disciplinas do curso de Cieˆncia da Computac¸a˜o da UDESC; principal- mente para Computac¸a˜o Gra´fica (CGR), Modelagem Geome´trica (MOG) e Processamento Digital de Imagens (PDI), podendo ser extens´ıvel a outras disciplinas. O material aqui apresentado e´ retirado de diversas fontes (que sera˜o citadas no decorrer do texto) na˜o devendo servir como u´nica fonte de refereˆncia do acadeˆmico. Uma boa refereˆncia inicial e´ o livro oficial da ferramenta VTK [Schroeder, Martin e Lorensen 2003]. O enfoque apresentado e´ o de tutoriais (programa exemplo) seguindo a mesma ordem do conteu´do programa´tico da disciplina de computac¸a˜o gra´fica. Os co´digos fonte apresentados nesta apostila podem ser encontrados no seguinte site: http://www.joinville.udesc.br/portal/professores/rogerio. Tais programas foram testados e compilados utilizando a ferramenta Microsoft Visual Studio (MSVC++ 6.0). Ou- tra refereˆncia importante para o acadeˆmico e´ o pro´prio site do desenvolvedor do VTK: Kitware, dispon´ıvel em http://www.kitware.com e da pro´pria biblioteca VTK dispon´ıvel em http://www.vtk.org. Neste u´ltimo URL, o acadeˆmico pode ainda se cadastrar no fo´rum de e-mails (em ingleˆs) da Kitware, composta atualmente por milhares de desenvolvedores do mundo todo, para onde podem ser submetidas du´vidas que (geralmente) sa˜o respondidas rapidamente pela comunidade acadeˆmica. O material e´ dividido em 5 cap´ıtulos: 1. Conceitos Ba´sicos 2. Transformac¸o˜es geome´tricas 3. Rendering 4. Modelagem Geome´trica 5. Animac¸o˜es Computacionais Bons Estudos! Prof. Roge´rio 1 Cap´ıtulo 1 Conceitos Ba´sicos Neste cap´ıtulo sera˜o apresentados conceitos introduto´rios sobre a ferramenta Visualization Toolkit - VTK. Ao final do cap´ıtulo o estudante sera´ capaz de: • Entender o que e´ o VTK? • Entender a estrutura de funcionamento e a hierarquia de classes da biblioteca • Criar um projeto ba´sico para desenvolvimento de aplicac¸o˜es console com VTK • Criar um projeto WIN32 para desenvolvimento de aplicac¸o˜es Windows 9x • Criar um projeto MFC (Microsoft Foundation Class) para aplicac¸o˜es com interface gra´fica usando VTK • Criar um projeto Java para desenvolvimento de aplicac¸o˜es Web • Criar uma aplicac¸a˜o com VTK utilizando a linguagem script Tcl/Tk Todos os exemplos apresentados neste material funcionam em qualquer uma das verso˜es de desenvolvimento de aplicac¸o˜es apresentadas anteriormente, desta forma cabe ao leitor escolher a melhor ferramenta de desenvolvimento segundo suas necessidades. 1.1 O que e´ o VTK? VTK e´ o acroˆnimo para Visualization Toolkit , ou seja, e´ uma biblioteca desenvolvida no paradigma orientado a objetos que implementa diversas func¸o˜es gra´ficas de computac¸a˜o gra´fica e visualizac¸a˜o. Pode-se desenvolver aplicac¸o˜es com VTK em C++, TCL/TK ou Java, tanto para o sistema operacional Microsoft Windows quanto para Linux. O paradigma de programac¸a˜o orientado a objetos (OO) difere da programac¸a˜o estruturada convencional pois esta cria uma abstrac¸a˜o apenas para os dados, enquanto que na OO a abstrac¸a˜o engloba os dados e as operac¸o˜es aplica´veis a estes. Para efeito de entendimento dos tutoriais apresentados neste material, supo˜e-se que o leitor seja familiarizado com os preceitos de programac¸a˜o orientada a objetos. Se este na˜o for o caso, sugere-se a leitura de livros de programac¸a˜o antes de tentar esta apostila. 2 1.1.1 Instanciamento de Objetos com VTK Em VTK tudo sa˜o objetos. As principais funcionalidades da ferramenta esta˜o desenvolvidas em hierarquia de classes que, para serem utilizadas, devem ser previamente instanciadas em objetos e parametrizados seus atributos (os quais a maoria das vezes ja´ apresentam valores iniciais). O processo de instanciac¸a˜o de um objeto e´ sempre realizado por um me´todo pro´prio denominado New(), que e´ uma func¸a˜o esta´tica necessa´ria para a criac¸a˜o de qualquer ob- jeto. Assim por exemplo, para se criar um objeto da classe vtkActor, utiliza-se o comando vtkActor::New(), conforme e´ apresentado no exemplo a seguir: vtkActor * ator = vtkActor::New(); 1.2 Pipeline de Visualizac¸a˜o O processo de visualizac¸a˜o de objetos (chamado de rendering1) em VTK consiste da criac¸a˜o de um pipeline de visualizac¸a˜o que define a “espinha dorsal” de todo processo de gerac¸a˜o de imagens. Um pipeline de visualizac¸a˜o usual consiste dos seguintes passos: Modelagem especificac¸a˜o da origem dos dados que descrevem os objetos que compo˜em a cena a ser visualizada Mapeamento especificac¸a˜o da func¸o˜es de mapeamento da geometria de um objeto Atores um ator e´ um objeto renderiza´vel na cena. E´ definido a partir de uma dada func¸a˜o de mapeamento de geometria Renderizador um renderizador e´ responsa´vel por transformar um objeto (ou conjunto de objetos) em uma imagem atrave´s das te´cnicas tradicionais de computac¸a˜o gra´fica Janela de Visualizac¸a˜o uma janela de visualizac¸a˜o e´ (geralmente) um formula´rio onde o renderizador ira´ reproduzir o resultado do processo de rendering Agente de Interac¸a˜o responsa´vel por receber e tratar interac¸o˜es (eventos) do usua´rio, como cliques de mouse, teclas pressionadas, etc., na janela de visualizac¸a˜o. O objeto agente de interac¸a˜o na˜o e´ necessariamente obrigato´rio; apenas nas aplicac¸o˜es onde se deseja ter um modo de acesso ra´pido a ac¸o˜es do usua´rio. Existem outras formas de se acessar tais entradas, como por exemplo criar uma aplicac¸a˜o utilizando os recursos da pro´pria API - Application Programming Interface conforme sera´ descrito na sec¸a˜o ???. 1O termo rendering engloba um conjunto de te´cnicas responsa´veis por transformar de dados em imagens 2D ou 3D 3 Origem dos Dados Mapeador Ator Renderizador Janela de Renderização Agente de Interação Figura 1.1: Pipeline de Visualizac¸a˜o do VTK 1.2.1 Surface Rendering e Volume Rendering Existem duas classes de te´cnicas de rendering suportadas pelo VTK: surface rendering (figura 1.2(a))onde os objetos que compo˜em a cena a ser renderizada sa˜o descritos a partir de superf´ıcies (geralmente malhas poligonais) ocas (sem informac¸a˜o acerca do interior dos objetos). Esta te´cnica e´ interessante em aplicac¸o˜es cujo objetivo principalmente e´ apresentar objetos (sua apareˆncia), tais como: animac¸o˜es e jogos computacionais. Ja´ a te´cnica volume rendering (figura 1.2(b)), representa cada objeto como um conjunto de pontos de um volume tridimensional qualquer. Essa te´cnica e´ mais complexa computacionalmente por armazenar uma grande quantidade de informac¸a˜o acerca de cada objeto, pore´m e´ u´til em aplicac¸o˜es onde o conteu´do interno dos objetos e´ uma informac¸a˜o importante como em aplicac¸o˜es me´dicas (ana´lise de tomografias computadorizadas, p.ex.) e simulac¸o˜es cient´ıficas. (a) (b) Figura 1.2: Tipos de Rendering - (a) Surface Rendering (b) Volume Rendering Este material apresentara´ exemplos em ambas as te´cnicas de rendering, pore´m o enfoque para a grande maioria dos tutoriais sera´ para aplicac¸o˜es de real-time rendering utilizando a te´cnica surface rendering. A pro´xima sec¸a˜o apresenta as diferentes formas de instalac¸a˜o do VTK. 1.3 Instalando o VTK 1.3.1 A partir dos Arquivos Fontes O processo de instalac¸a˜o do VTK a partir dos arquivos fontes segue os seguintes passos: 1. Efetuar o download do arquivos fontes na pa´gina do VTK (http://www.vtk.org/get-software.php) 4 2. Descompactar os arquivos fontes em uma pasta de sua prefereˆncia 3. Efetuar o download em http://www.cmake.org/HTML/Download.html, do sistema de compilac¸a˜o de bibliotecas CMake para a plataforma desejada: Windows, Linux, etc. 4. Executar o programa CMake2 (figura 1.3) e preencha os dados solicitados: (a) Em “Where is the source code” digite o caminho onde foram instalados os co´digos fontes do VTK (no passo 2) ou clique no bota˜o Browse e selecione o caminho. (b) Em “Where to build the binaries” digite o caminho onde devem ser gerados os arquivos compilados (se este na˜o existir o CMake ira´ cria´-lo) ou clique no bota˜o Browse e selecione o caminho. (c) Clique no bota˜o Configure e na janela de selec¸a˜o da ferramenta de compilac¸a˜o desejada (ver figura menor em detalhe) clique em OK. Sera˜o criadas as diretivas de compilac¸a˜o segundo em func¸a˜o da ferramenta escolhida. (d) Altere o valor das diretivas (se desejar) e clique novamente no bota˜o Configure (e) Clique no bota˜o OK para gerar o arquivo de compilac¸a˜o (makefile). (f) Compile o arquivo gerado (ele esta´ no direto´rio especificado no passo 4b), p.ex.: vtk.sln para o MS Visual Studio .NET. Figura 1.3: Interface CMake 2.2 beta DICA: Nas pa´ginas oficiais do VTK e CMake na internet, podem ser encontradas ins- truc¸o˜es mais detalhadas caso seja necessa´rio. 2A interface pode variar em func¸a˜o da versa˜o e/ou sistema operacional escolhidos 5 1.3.2 A partir dos Arquivos Bina´rios Pre´-Compilados O processo de instalac¸a˜o do VTK a partir dos arquivos bina´rios pre´-compilados e´ um processo mais ra´pido (pois elimina-se o tempo de compilac¸a˜o da biblioteca), pore´m ate´ o momento esta´ dispon´ıvel apenas para Windows (para MS Visual Studio). Segue os seguintes passos: 1. Efetuar o download do arquivo de instalac¸a˜o (vtk42-LastestRelease.exe) na pa´gina do VTK (http://www.vtk.org/get-software.php) 2. Execute o arquivo de instalac¸a˜o 3. O assistente de instalac¸a˜o ira´ guia´-lo no processo de instalac¸a˜o (figura 1.4). Figura 1.4: Assistente de Instalac¸a˜o para Windows 1.4 Criando a Primeira Aplicac¸a˜o VTK A primeira aplicac¸a˜o completa com VTK a ser apresentada ira´ respeitar o pipeline de vi- sualizac¸a˜o apresentado em 1.2. Apesar de o VTK permitir o desenvolvimento de aplicac¸o˜es em diferentes linguagens de programac¸a˜o: C++, Java, Tcl/Tk, Python, etc., iremos adotar o C++ para os exemplos dessa apostila. No manual da documentac¸a˜o do VTK e´ poss´ıvel encontrar exemplos de codificac¸a˜o nas outras linguagens. A aplicac¸a˜o exemplo cone.cpp consiste simplesmente de um cone cinza claro em um fundo preto e o agente de interac¸a˜o dispon´ıvel, conforme e´ apresentado na figura 1.5. 1.4.1 Desenvolvendo uma Aplicac¸a˜o Console O desenvolvimento de uma aplicac¸a˜o console consiste de todos os passos apresentados na sec¸a˜o 1.2. Sa˜o utilizados os seguintes comandos para tal: 6 Figura 1.5: Primeira Aplicac¸a˜o com VTK vtkRenderer objeto que implementa as te´cnidas tradicionais de rendering da computac¸a˜o gra´fica vtkRenderWindow objeto de criac¸a˜o e manipulac¸a˜o de janelas (onde sera´ renderizada a cena definida no objeto vtkRenderer) vtkRenderWindowInteractor objeto de interac¸a˜o com o usua´rio. Captura eventos do usua´rio (como cliques de mouse, teclas pressionadas. etc) e responde atualizando paraˆmetros nos objetos da cena vtkConeSource objeto que define a origem de dados para uma primitiva gra´fica cone vtkPolyDataMapper define um objeto que mapeia uma dada origem de dados para uma malha de pol´ıgonos vtkActor objeto ator a ser renderizado. E´ definido a partir de um certo mapeador de pol´ıgonos. O co´digo fonte que ilustra esse pipeline e´ apresentado a seguir: /* VTK1.CPP Criac¸~ao do framework de visualizac¸~ao do VTK em modo console Seque^ncia do pipeline de visualizac¸~ao: CubeSource -> PolyDataMapper -> Actor -> Renderer -> RenderWindow <- RenderWindowInteractor Outubro, 2005 Roge´rio Eduardo da Silva */ #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkConeSource.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> 7 void main(void) { vtkRenderer * rdr = vtkRenderer :: New(); rdr->SetBackground(0.0f,0.0f,0.0f); // cor de fundo: preto vtkRenderWindow * rw = vtkRenderWindow :: New(); rw->AddRenderer(rdr); // conecta Renderer -> RenderWindow rw->SetSize(500,500); // tamanho da janela de visualizac¸~ao vtkRenderWindowInteractor * rwi = vtkRenderWindowInteractor::New(); rwi->SetRenderWindow(rw); // conecta RenderWindowInteractor -> RenderWindow vtkConeSource * cone = vtkConeSource::New(); // define um cone cone->SetRadius(2); // raio cone->SetHeight(3); // altura cone->SetResolution(10); // resoluc¸~ao da base vtkPolyDataMapper * mapaCone = vtkPolyDataMapper::New(); mapaCone->SetInput(cone->GetOutput()); // cria malha poligonal a partir do cone gerado vtkActor * ator = vtkActor::New(); ator->SetMapper(mapaCone); // conecta mapper -> actor ator->SetPosition(-5,0,0); // coordenadas do centro do ator (SRU) rdr->AddActor(ator); // conecta Actor -> Renderer rwi->Initialize(); // inicializa interactor rwi->Start(); // executa interactor // desaloca memo´ria dos objetos criados anteriormente cone->Delete(); mapaCone->Delete(); ator->Delete(); rdr->Delete(); rw->Delete(); rwi->Delete(); } Compilando um Projeto em MS-Visual Studio 6.0 O processo de criac¸a˜o de um projeto console na ferramenta Microsoft Visual Studio 6.0 e´: 1. Selecione o menu File | New e escolha Projects | Win32 Console Application (conforme a figura 1.6(a)) 2. Em “Project Name” escolha um nome para o projeto e em “Location” escolha o ca- minho onde o projeto sera´ criado. Clique em OK. 3. A seguir escolha o tipo de aplicac¸a˜o que deseja criar (figura 1.6(b)). Escolha “An empty project” para criar uma aplicac¸a˜o vazia (nenhum arquivo pre´-definido). Clique em Finish. 4. Finalizando, na janela apresentada em 1.6(c) confirme a criac¸a˜o do novo projeto console solicitado clicando no bota˜o OK. 5. O novo projeto esta´ criado. 8 (a) (b) (c) Figura 1.6: Criando um Projeto Console em MSVC 6.0 Uma vez criado um projeto, pode-se acrescentar arquivos ao mesmo de duas formas: • Selecione o menu Project | Add Files to Project | Files ... para adicionar ar-quivos pre´ existentes ou • Criando um novo arquivo em branco atrave´s do menu File | New e selecionando Files | C++ Source File (conforme a figura 1.7). Em “File name” digite o nome desejado para o novo arquivo e em “Location” selecione o caminho onde sera´ criado o arquivo (usualmente utiliza-se o mesmo direto´rio do projeto criado anteriormente). Por fim, clique em OK. Figura 1.7: Criando um novo arquivo Apo´s o projeto e os arquivos fontes terem sido criados, e´ necessa´rio configurar os paraˆme- tros de compilac¸a˜o do projeto, conforme os seguintes passos: 1. No menu Tools | Options, selecione a guia Directories (figura 1.8) 2. Selecione em “Show directories for” a opc¸a˜o Include files 3. Inclua na sec¸a˜o Directories a linha “<caminho>/include/vtk”, onde <caminho> in- dica o caminho onde o VTK foi instalado em seu computador3 3Usualmente C:\ARQUIVOS DE PROGRAMAS\VTK42\ 9 4. No menu Projects | Settings escolha a guia Link e em Category escolha General 5. Na opc¸a˜o “Object/library modules” acrescente a lista de arquivos lib necessa´rios a sua aplicac¸a˜o4. Clique em OK. 6. No menu Build | Build project (tecla F7) compile e execute o projeto. Figura 1.8: Configurac¸o˜es de Projeto 4Os arquivos necessa´rios dependem de quais objetos do VTK foram utilizados. Os programas mais simples utilizam: vtkCommon.lib vtkRendering.lib vtkGraphics.lib e vtkImaging.lib. A lista completa esta´ dispon´ıvel na pasta lib da instalac¸a˜o do VTK 10 Cap´ıtulo 2 Transformac¸o˜es Geome´tricas 11 Cap´ıtulo 3 Rendering 12 Cap´ıtulo 4 Modelagem Geome´trica 13 Cap´ıtulo 5 Animac¸o˜es Computacionais 14 Refereˆncias Bibliogra´ficas [Schroeder, Martin e Lorensen 2003]SCHROEDER, W.; MARTIN, K.; LORENSEN, B. The Visualization Toolkit - An Object-Oriented Approach to 3D Graphics. 2a edic¸a˜o. [S.l.]: Pren- tice Hall, 2003. 15
Compartilhar