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
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