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.

El tipo vector es un arreglo unidimensional compuesto <strong>de</strong> un tipo esca<strong>la</strong>r particu<strong>la</strong>r con cuatro componentes como<br />

máximo. Por <strong>de</strong>fecto, un vector es un arreglo compuesto por cuatro valores en punto flotante. Sin embargo, se<br />

pue<strong>de</strong> <strong>de</strong>finir manualmente vectores arbitrarios.<br />

Sin embargo, <strong>la</strong> manera más común <strong>de</strong> <strong>de</strong>c<strong>la</strong>rar vectores es usar el nombre <strong>de</strong>l tipo seguido por un número entero<br />

entre dos y cuatro. HLSL <strong>de</strong>fine por <strong>de</strong>fecto estos tipos usando type<strong>de</strong>f para brindar más comodidad al <strong>de</strong>sarrol<strong>la</strong>dor.<br />

Por ejemplo, para <strong>de</strong>c<strong>la</strong>ra un tup<strong>la</strong> <strong>de</strong> cuatro floats, podríamos usar cualquiera <strong>de</strong> <strong>la</strong>s siguientes <strong>de</strong>c<strong>la</strong>raciones:<br />

float4 fVector0;<br />

float fVector1[4];<br />

vector fVector2;<br />

vector fVector3;<br />

Como se ve en el ejemplo anterior, se podría implementar vectores con <strong>la</strong> ayuda <strong>de</strong> arreglos, el cual es otro tipo<br />

disponible en HLSL. Sin embargo, en tales casos el compi<strong>la</strong>dor no podría distinguir entre arreglos reales <strong>de</strong> cuatro<br />

floats y un vector <strong>de</strong> cuatro componentes <strong>de</strong> tipo float.<br />

Los componentes <strong>de</strong> los vectores pue<strong>de</strong>n acce<strong>de</strong>rse <strong>de</strong> varias maneras. A continuación se muestra <strong>la</strong>s distintas<br />

posibilida<strong>de</strong>s para acce<strong>de</strong>r a estos componentes:<br />

Por componente: vector.x, vector.y, vector.z, vector.w<br />

Por color: vector.r, vector.g, vector.b, vector.a<br />

Por índice: vector[0], vector[1], vector[2], vector[3]<br />

Por conveniencia, también se pue<strong>de</strong> acce<strong>de</strong>r a los componentes <strong>de</strong>l vector combinando múltiples componentes (por<br />

ejemplo vector.xzzy). De esta forma, los componentes <strong>de</strong>ben especificarse usando o {x, y, z, w} o {r, g, b, a} pero no<br />

ambos. También se pue<strong>de</strong> repetir componentes, siempre y cuando se use al vector para lectura y no escritura. Esta<br />

forma <strong>de</strong> acce<strong>de</strong>r a los datos a menudo se l<strong>la</strong>ma swizzle.<br />

float4 pos = {3.0f, 5.0f, 2.0f, 1.0f};<br />

float2 vec0 = pos.xy; // vec0 es {3.0f, 5.0f}<br />

float2 vec0 = pos.xx; // vec0 es {3.0f, 3.0f}<br />

float2 vec1 = pos.ry; // Invalido<br />

float2 vec2;<br />

vec2.xx = pos.xy; // Invalido<br />

Matrices<br />

Tipo Matriz Valores<br />

Matrix Un vector <strong>de</strong> cuatro por cuatro componentes <strong>de</strong> tipo float<br />

matrix Un vector conteniendo n fi<strong>la</strong>s y m columnas <strong>de</strong><br />

componentes <strong>de</strong>l tipo especificado<br />

Son simi<strong>la</strong>res a los vectores. Las principales diferencias radican en los modos <strong>de</strong> acceso. Permiten acce<strong>de</strong>r a<br />

<strong>de</strong>terminadas fi<strong>la</strong>s usando un acceso <strong>de</strong>l tipo arreglo. Por ejemplo, podríamos acce<strong>de</strong>r a una so<strong>la</strong> fi<strong>la</strong> usando<br />

Página 48

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

Saved successfully!

Ooh no, something went wrong!