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.
198 Interface <strong>de</strong> programação<br />
da função CIntManager::CreateObject(). Neste processo <strong>de</strong> ren<strong>de</strong>rização, o buffer<br />
<strong>de</strong> profundida<strong>de</strong> utilizado é o mesmo utilizado para a visualização. O teste <strong>de</strong> profundida<strong>de</strong><br />
é habilitado e o conteúdo <strong>de</strong>ste buffer é alterado para cada mo<strong>de</strong>lo ren<strong>de</strong>rizado. A tarefa <strong>de</strong><br />
limpar o conteúdo do buffer <strong>de</strong> profundida<strong>de</strong> é <strong>de</strong> responsabilida<strong>de</strong> da aplicação.<br />
C.1.3 Funções <strong>de</strong> interface <strong>de</strong> saída<br />
• Sintaxe: CIntManager::Deco<strong>de</strong>( float *pAttList[ATTTYPE_SIZE] ).<br />
Descrição: obtém os atributos armazenados nos buffers <strong>de</strong> ren<strong>de</strong>rização não visíveis após a<br />
execução <strong>de</strong> CIntManager::Ren<strong>de</strong>r().<br />
Parâmetros:<br />
– pAttList: conjunto <strong>de</strong> ATTTYPE_SIZE arranjos, on<strong>de</strong> ATTTYPE_SIZE é o número<br />
máximo <strong>de</strong> atributos que po<strong>de</strong>m ser obtidos pela arquitetura (atualmente esse valor é igual<br />
a 9). Somente os arranjos com índices ATTTYPE informados através <strong>de</strong> CIntManager<br />
::SetAttributes() serão válidos. Cada arranjo é um conjunto <strong>de</strong> valores numéricos<br />
em ponto flutuante, contendo os valores dos atributo <strong>de</strong> saída. O tamanho do arranjo é<br />
<strong>de</strong>finido pelo número <strong>de</strong> pixels da atual região <strong>de</strong> interesse, vezes o número <strong>de</strong> valores em<br />
ponto flutuante utilizado por cada pixel. Por exemplo, o atributo <strong>de</strong> valor <strong>de</strong> profundida<strong>de</strong><br />
requer, para cada pixel, apenas um valor em ponto flutuante. Assim, para uma região <strong>de</strong><br />
interesse <strong>de</strong> tamanho 5×5, o arranjo pAttList[ATTTYPE_DEPTH] terá 5×5×1 = 25<br />
valores. Em contrapartida, para o atributo <strong>de</strong> vetor normal, são necessários 3 três valores<br />
em ponto flutuante (um para cada componente da coor<strong>de</strong>nada) para cada pixel, <strong>de</strong> modo<br />
que pAttList[ATTTYPE_NORMAL] terá 5 × 5 × 3 = 75 valores.<br />
Comumente, funções tais como CIntManager::BindSemantics(),<br />
CIntManager::SetAttributes(), além <strong>de</strong> praticamente todas as funções <strong>de</strong> CIntObj, são<br />
chamadas apenas uma vez durante a inicialização da arquitetura e inicialização dos mo<strong>de</strong>los geométri-<br />
cos utilizados. O uso <strong>de</strong> tais funções durante o laço <strong>de</strong> ren<strong>de</strong>rização po<strong>de</strong> prejudicar o <strong>de</strong>sempenho<br />
da aplicação, pois elas envolvem tarefas potencialmente custosas, como criação e carregamento <strong>de</strong><br />
texturas, criação <strong>de</strong> sha<strong>de</strong>rs e <strong>de</strong>terminação da vizinhança <strong>de</strong> 1-anel dos mo<strong>de</strong>los. Por outro lado,<br />
funções como CIntManager::SetROI(), CIntObj::TogglePreVertexDeform(),<br />
CIntObj::TogglePostVertexDeform() e funções <strong>de</strong> obtenção <strong>de</strong> estados atuais po<strong>de</strong>m ser<br />
executadas para cada quadro <strong>de</strong> exibição, sem prejuízo no <strong>de</strong>sempenho. Por exemplo, a região <strong>de</strong><br />
interesse po<strong>de</strong> ser modificada <strong>de</strong> acordo com os eventos <strong>de</strong> movimentação do mouse, <strong>de</strong>vendo ser<br />
chamada durante o laço <strong>de</strong> ren<strong>de</strong>rização.