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.
6.2 Exemplos <strong>de</strong> aplicações 139<br />
pelo cursor 2D não contenha mais nenhum i<strong>de</strong>ntificador <strong>de</strong> face. <strong>Uma</strong> vez que cada face <strong>de</strong>ve ter<br />
seu i<strong>de</strong>ntificador próprio, utilizamos geometria não in<strong>de</strong>xada, pois os i<strong>de</strong>ntificadores das faces são<br />
<strong>de</strong>finidos pelos atributos dos vértices que compõem cada face.<br />
A captura <strong>de</strong> uma imagem <strong>de</strong>sta aplicação é mostrada na figura 6.6. Os i<strong>de</strong>ntificadores <strong>de</strong> cada<br />
face intersectada, em uma or<strong>de</strong>m <strong>de</strong> frente para trás a partir do observador, são exibidos no canto<br />
inferior esquerdo da imagem.<br />
Os seguintes comandos da biblioteca são utilizados para configurar o fluxo <strong>de</strong> processamento da<br />
arquitetura e ler os resultados:<br />
• Utilizamos o comando CIntManager::SetAttributes() passando como parâmetro<br />
apenas o valor <strong>de</strong> enumeração ATTTYPE_USERDEFNI. Este parâmetro informa que o único<br />
atributo a ser armazenado para cada pixel do mo<strong>de</strong>lo ren<strong>de</strong>rizado é um valor <strong>de</strong>finido pela apli-<br />
cação para a geometria não in<strong>de</strong>xada do mo<strong>de</strong>lo. Tal valor é o i<strong>de</strong>ntificador <strong>de</strong> cada face, e é<br />
incluído no buffer <strong>de</strong> vértices da geometria original como um elemento adicional <strong>de</strong> coor<strong>de</strong>-<br />
nadas <strong>de</strong> textura.<br />
• O comando CIntManager::BindSemantics() é chamado com o par <strong>de</strong> valores<br />
VSSEMANTIC_TEXCOORD1 e INTSEMANTIC_USERDEFNI <strong>de</strong> modo a informar que o valor<br />
<strong>de</strong>finido pela aplicação para a geometria não in<strong>de</strong>xada é encontrado no segundo atributo <strong>de</strong> co-<br />
or<strong>de</strong>nadas <strong>de</strong> textura do buffer <strong>de</strong> vértices.<br />
• O comando CIntManager::SetROI() é utilizado da mesma forma que na tarefa <strong>de</strong> se-<br />
leção, passando como coor<strong>de</strong>nadas a localização atual do cursor 2D.<br />
• Chamamos o comando CIntObj::SetPixelDeform() do mo<strong>de</strong>lo sob interação para<br />
<strong>de</strong>finir um sha<strong>de</strong>r <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> fragmentos que <strong>de</strong>scarta a ren<strong>de</strong>rização dos<br />
fragmentos <strong>de</strong> todas as faces selecionadas anteriormente no processo iterativo <strong>de</strong> seleção <strong>de</strong><br />
faces. A informação sobre quais faces já foram selecionadas é obtida <strong>de</strong> registradores constan-<br />
tes configurados pela aplicação nas chamadas <strong>de</strong> retorno do estágio <strong>de</strong> codificação <strong>de</strong> atributos.<br />
• No fim <strong>de</strong> cada iteração do fluxo <strong>de</strong> processamento da arquitetura, o comando CIntManager<br />
::Deco<strong>de</strong>() é utilizado para obter o i<strong>de</strong>ntificador da face visível na atual iteração. Nas<br />
funções <strong>de</strong> chamada <strong>de</strong> retorno utilizadas no estágio <strong>de</strong> codificação <strong>de</strong> atributos (i.e., <strong>de</strong>finidas<br />
com CIntObj::SetRen<strong>de</strong>rCallback()), os i<strong>de</strong>ntificadores das faces já selecionadas<br />
são enviados ao sha<strong>de</strong>r <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> fragmentos, o qual utilizará esses valores<br />
para <strong>de</strong>terminar quais as faces que não <strong>de</strong>vem ser ren<strong>de</strong>rizadas.