Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
120 <strong>Arquitetura</strong> <strong>de</strong> interação<br />
região <strong>de</strong> interesse contém o pixel apontado pelo cursor 2D, o atributo retornado é, <strong>de</strong> fato, o<br />
i<strong>de</strong>ntificador do mo<strong>de</strong>lo apontado pelo cursor.<br />
A seguir mostramos uma listagem <strong>de</strong> código exemplificando a aplicação <strong>de</strong>ste procedimento <strong>de</strong><br />
uso para a implementação <strong>de</strong> uma tarefa simples <strong>de</strong> seleção. Os comandos utilizados seguem a<br />
interface <strong>de</strong> programação <strong>de</strong>scrita no apêndice C e utilizam a linguagem C++ com a API OpenGL<br />
e a biblioteca utilitária GLUT. Por simplicida<strong>de</strong>, neste exemplo a geometria é apenas um triângulo,<br />
e os sha<strong>de</strong>rs <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> vértices e fragmentos não modificam esses atributos<br />
(figura 5.11). A implementação <strong>de</strong>ste procedimento <strong>de</strong> seleção em uma cena mais complexa é <strong>de</strong>scrita<br />
na seção 6.2.<br />
Ressaltamos que, comparando com a programação convencional, foi necessário fazer somente as<br />
seguintes modificações:<br />
• Instanciar a arquitetura <strong>de</strong> interação e inicializar o ambiente junto com as funções <strong>de</strong> inicializa-<br />
ção do OpenGL na função Init().<br />
• Chamar, na função <strong>de</strong> ren<strong>de</strong>rização Display(), o comando <strong>de</strong> execução do fluxo <strong>de</strong> proces-<br />
samento da arquitetura e o comando <strong>de</strong> <strong>de</strong>codificação dos atributos calculados.<br />
• Definir a região <strong>de</strong> interesse em relação à posição do cursor do dispositivo apontador 2D.<br />
#inclu<strong>de</strong> "CIntManager.h"<br />
#inclu<strong>de</strong> <br />
#inclu<strong>de</strong> <br />
// Tamanho da região <strong>de</strong> interesse<br />
#<strong>de</strong>fine ROIW 1<br />
#<strong>de</strong>fine ROIH 1<br />
CIntManager *g_pIntManager = NULL;<br />
float *g_pROI[1]; // Array com o conteúdo da região <strong>de</strong> interesse<br />
float g_fNear = 1.0; float g_fFar = 20.0;<br />
// Função <strong>de</strong> chamada <strong>de</strong> retorno para atualizar e ren<strong>de</strong>rizar a geometria<br />
void UpdateRen<strong>de</strong>rCallBack( CIntObj *pObj, void *pUserData ) {<br />
glPushMatrix( );<br />
glBegin( GL_TRIANGLES );