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.
192 Interface <strong>de</strong> programação<br />
SetVertexBuffer(). Cada seqüência <strong>de</strong> três índices correspon<strong>de</strong> a um triângulo da<br />
geometria.<br />
– iSize: número <strong>de</strong> triângulos da geometria.<br />
• Sintaxe: CIntObj::SetPreVertexDeform( char *szFunc ).<br />
Descrição: informa o sha<strong>de</strong>r <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> vértices que será utilizado no<br />
estágio 1 <strong>de</strong> processamento da arquitetura (ver figuras 5.9 e 5.10), i.e., antes da estimativa <strong>de</strong><br />
proprieda<strong>de</strong>s <strong>de</strong> geometria diferencial.<br />
Parâmetros:<br />
– szFunc: ponteiro para uma string <strong>de</strong> texto contendo o código da função <strong>de</strong> modifi-<br />
cação <strong>de</strong> atributos <strong>de</strong> vértices, segundo a linguagem <strong>de</strong> sha<strong>de</strong>rs utilizada pela API grá-<br />
fica (GLSL para OpenGL e HLSL para Direct<strong>3D</strong>). Tal função <strong>de</strong>ve ter obrigatoriamente<br />
o nome fPreVSDeform. Em HLSL, ela <strong>de</strong>ve receber como parâmetro <strong>de</strong> entrada<br />
uma estrutura <strong>de</strong> dados do tipo VSDEFORM. Internamente, a arquitetura <strong>de</strong>fine essa es-<br />
trutura segundo os atributos <strong>de</strong> vértices da geometria original mapeados pela função<br />
CIntManager::BindSemantics(). Essa estrutura contém os atributos da geome-<br />
tria original <strong>de</strong> cada vértice.<br />
O conteúdo <strong>de</strong> VSDEFORM inclui necessariamente uma variável vec4 vPos (GLSL)<br />
ou float4 vPos (HLSL) contendo o atributo <strong>de</strong> posição do vértice. As <strong>de</strong>mais vari-<br />
áveis são acrescentadas <strong>de</strong> acordo com os valores <strong>de</strong> VSSEMANTIC utilizados na última<br />
chamada <strong>de</strong> CIntManager::BindSemantics(). Por exemplo, o valor <strong>de</strong> enume-<br />
ração VSSEMANTIC_NORMAL adiciona à estrutura a variável float4 vNormal :<br />
NORMAL em HLSL e vec4 vNormal em GLSL. O valor VSSEMANTIC_COLOR0 adi-<br />
ciona a variável float4 vColor0 : COLOR0 em HLSL e vec4 vColor0 em<br />
GLSL. O valor VSSEMANTIC_TEXCOORD0 adiciona a variável float4 vTex0 :<br />
TEXCOORD0 em HLSL e vec4 vTex0 em GLSL, e assim por diante.<br />
Em GLSL, fPreVSDeform não contém VSDEFORM como parâmetro, e os atributos dos<br />
vértices po<strong>de</strong>m ser acessados usando a interface padrão do GLSL. Por exemplo, a posição<br />
do vértice é obtida <strong>de</strong> gl_Vertex.<br />
A função fPreVSDeform po<strong>de</strong> realizar modificações arbitrárias dos atributos <strong>de</strong><br />
VSDEFORM. O resultado <strong>de</strong>ve ser armazenado em uma nova estrutura VSDEFORM que<br />
<strong>de</strong>verá ser retornada pela função, seja ela em HLSL ou GLSL. Internamente, a arquitetura<br />
utilizará esses valores para atualizar as texturas que contém os dados da geometria. Esses<br />
dados serão utilizadas na estimativa das proprieda<strong>de</strong>s <strong>de</strong> geometria diferencial.