14.04.2013 Views

Untitled - Departamento de Ciencias e Ingeniería de la Computación

Untitled - Departamento de Ciencias e Ingeniería de la Computación

Untitled - Departamento de Ciencias e Ingeniería de la Computación

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Primero se le indica que cargue el sha<strong>de</strong>r <strong>de</strong>s<strong>de</strong> un archivo, en este caso particu<strong>la</strong>r codigosha<strong>de</strong>r.fx. Esta operación<br />

se suele hacer una so<strong>la</strong> vez, y es por esta razón que en una aplicación real no <strong>la</strong> veremos en el método <strong>de</strong><br />

ren<strong>de</strong>rizado, pero resulta conveniente ubicar<strong>la</strong> aquí por propósitos didácticos.<br />

En segunda instancia, se le indica que funciones calcu<strong>la</strong>ran el vertex sha<strong>de</strong>r y/o pixel sha<strong>de</strong>r para ren<strong>de</strong>rizar el objeto<br />

y sobre cual sha<strong>de</strong>r mo<strong>de</strong>l se trabajara, a<strong>de</strong>más <strong>de</strong> otros parámetros. HLSL incorpora para este propósito un<br />

esquema l<strong>la</strong>mado técnica, tema que discutiremos en el capitulo siguiente.<br />

Hay que tener en cuenta que Microsoft l<strong>la</strong>ma a los sha<strong>de</strong>r efectos, y es por esto que en este código vemos el<br />

nombre effect en lugar <strong>de</strong>l nombre sha<strong>de</strong>r.<br />

Ahora estamos casi listos para po<strong>de</strong>r empezar a ren<strong>de</strong>rizar, pero primero se necesita conocer <strong>la</strong> cantidad <strong>de</strong> pasadas<br />

que tiene el sha<strong>de</strong>r. En <strong>la</strong> próxima sección se profundizara sobre el tema <strong>de</strong> pasadas, solo necesitaremos saber por el<br />

momento que un sha<strong>de</strong>r pue<strong>de</strong> dividirse en pasadas, cada una <strong>de</strong> <strong>la</strong>s cuales genera información útil a <strong>la</strong> siguiente.<br />

Por cada pasada se setean <strong>la</strong>s variables globales que utilizara el sha<strong>de</strong>r, como <strong>la</strong> posición <strong>de</strong> <strong>la</strong> cámara, información<br />

<strong>de</strong> luces, etc. Luego, se indica que comenzara <strong>la</strong> pasada y se ren<strong>de</strong>riza el objeto invocando <strong>la</strong>s mismas funciones<br />

estándares que usábamos cuando utilizábamos el pipeline gráfico <strong>de</strong> función fija. Al terminar <strong>de</strong> ren<strong>de</strong>rizar el objeto<br />

indicamos <strong>la</strong> finalización <strong>de</strong> <strong>la</strong> pasada. Por último, cuando todas <strong>la</strong>s pasadas se hayan calcu<strong>la</strong>do se <strong>de</strong>be indicar que<br />

terminamos <strong>de</strong> procesar el sha<strong>de</strong>r. Por cuestiones <strong>de</strong> eficiencia, si una variable global es utilizada por varias pasadas,<br />

se podría pasar el valor <strong>de</strong> estas variables antes.<br />

D3DX es una API <strong>de</strong> alto nivel que se ubica sobre <strong>la</strong> API Direct3D. D3DX fue introducida en Direct3D 8 y fue mejorada<br />

cuando salió Direct3D 9. D3DX contiene rutinas para hacer operaciones comunes a varios tipos <strong>de</strong> aplicaciones 3D.<br />

En el caso particu<strong>la</strong>r <strong>de</strong> DirectX, se utiliza una API l<strong>la</strong>mada D3DX para compi<strong>la</strong>r los sha<strong>de</strong>rs escritos en HLSL o en<br />

lenguaje ensamb<strong>la</strong>dor. DirectX no sabe nada a cerca <strong>de</strong> HLSL, solo conoce el código maquina ya compi<strong>la</strong>do. Este es<br />

un buen esquema, <strong>de</strong>bido a que el compi<strong>la</strong>dor pue<strong>de</strong> ser actualizado in<strong>de</strong>pendientemente <strong>de</strong> DirectX. De hecho, <strong>la</strong>s<br />

distintas evoluciones <strong>de</strong> DirectX 9 fueron cambios al compi<strong>la</strong>dor incluido en D3DX, generalmente cambios que<br />

afectaban <strong>la</strong> optimización <strong>de</strong>l código generado. Esta política cambia en Direct3D 10 don<strong>de</strong> <strong>la</strong> única forma <strong>de</strong> escribir<br />

los sha<strong>de</strong>rs es en HLSL y don<strong>de</strong> el sistema <strong>de</strong> efectos y el compi<strong>la</strong>dor <strong>de</strong> HLSL son parte básica <strong>de</strong>l API y no<br />

pertenecen a <strong>la</strong> librería <strong>de</strong> extensiones D3DX.<br />

2.7 Ren<strong>de</strong>rizar a textura<br />

A lo <strong>la</strong>rgo <strong>de</strong>l texto asumimos que el contenido <strong>de</strong>l frame buffer se reproducía siempre en <strong>la</strong> pantal<strong>la</strong>, lo cierto es<br />

que se pue<strong>de</strong> almacenar en una textura, lo cual pue<strong>de</strong> ser increíblemente útil. Por ejemplo, podríamos usar esta<br />

característica para producir environment mapping dinámico. Pero como podrán imaginar este no es el caso por el<br />

cual se dijo que es increíblemente útil.<br />

Esta característica tiene otra importante cualidad, y es <strong>la</strong> <strong>de</strong> permitir el concepto <strong>de</strong> pasadas. Como dijimos<br />

anteriormente, un sha<strong>de</strong>r pue<strong>de</strong> dividirse en pasadas, cada una <strong>de</strong> <strong>la</strong>s cuales genera información útil a <strong>la</strong> siguiente.<br />

Página 41

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

Saved successfully!

Ooh no, something went wrong!