03.04.2013 Views

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

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!