Conversión y conversión
Al transferir valores entre la aplicación host y un parámetro de efecto, los datos se escriben según lo previsto cuando el tipo de datos de origen (en la aplicación host) coincide con el tipo de datos de destino (en el parámetro effect). Cuando los tipos de datos difieren, la conversión se producirá a medida que los datos de origen se reorganizan para ajustarse al destino.
DXSAS define las siguientes reglas de conversión de tipos. Se trata de un superconjunto del efecto (.fx) y las reglas de conversión de tipos HLSL. DXSAS también define algunos modificadores de valor de parámetro que pueden afectar al valor que se transfiere de la aplicación host a un parámetro enlazado.
Conversión de tipos
En la tabla siguiente se muestra la conversión que se producirá cuando se transfiera un tipo de datos a otro tipo de datos:
Tipo de origen | Tipo de destino | Comportamiento |
---|---|---|
FLOAT | int | Redondeo a cero. |
float, int | bool | Los valores no son iguales a 0, en función de una comparación no igual a 0 (int) o 0,0 (float), se consideran true; de lo contrario, el valor se considera false. |
int | FLOAT | |
bool | int, float | False se convierte en cero. True se convierte en uno. |
texture1D, texture2D, texture3D, textureCUBE | textura | La textura de destino se trata como el tipo de textura de origen. |
string | texture1D, texture2D, texture3D, textureCUBE | El valor de cadena se trata como una dirección de recurso y se resuelve de la misma manera que la anotación de inicialización de parámetros. Si no se puede resolver la dirección del recurso, la conversión no es válida y las aplicaciones host deben devolver un error. Si el recurso se resuelve correctamente, el tipo de la expresión se trata como el mismo tipo que el recurso resuelto. |
Conversión de clases
Además de las reglas de conversión de tipos descritas anteriormente, DXSAS define el conjunto de reglas de conversión necesarias para convertir entre tipos de clase. Las matrices de columna (N x 1), las matrices de fila (1 x N) y las estructuras numéricas se tratan como vectores.
Los parámetros de matriz de efecto y las variables de matriz HLSL pueden definir si el valor es una matriz de fila principal o de columna; sin embargo, las API de DirectX siempre tratan D3DMATRIX y D3DXMATRIX como filas principales.
Clase source | Clase de destino | Comportamiento |
---|---|---|
Escalar | Escalar | Aplicar conversión de tipos. |
Escalar | Vector | Replique el valor de origen escalar en todos los componentes del vector de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Escalar | Matriz | Replique el valor de origen escalar en todos los componentes de la matriz de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Escalar | Object | Conversión no válida. Las aplicaciones host deben devolver un error. |
Escalar | Estructura | Válido solo si la estructura de destino solo contiene elementos numéricos. Si es válido, replique el valor de origen escalar en cada componente de la estructura de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Vector | Escalar | El escalar de destino recibe el valor del primer componente del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Vector | Vector | Conversión no válida si el vector de destino tiene más componentes que el vector de origen. El vector de destino recibe los valores más a la izquierda del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. Se pierden los componentes restantes de la mayoría de los derechos del vector de origen. |
Vector | Matrix | Conversión no válida a menos que el vector de origen tenga el mismo número de componentes que la matriz de destino. Si la conversión es válida, se aplica el comportamiento de la conversión vectorial a vector. |
Vector | Object | Conversión no válida. Las aplicaciones host deben devolver un error. |
Vector | Estructura | Válido solo si la estructura de destino solo tiene elementos numéricos y no contiene más elementos de los que el vector de origen tiene componentes. Los elementos de la estructura de destino reciben los componentes más a la izquierda del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descritos en Conversión de tipos. |
Matriz | Escalar | El escalar de destino recibe el valor del valor superior izquierdo de la matriz de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Matriz | Vector | Conversión no válida a menos que la matriz de origen tenga el mismo número de componentes que el vector de destino. Si la conversión es válida, se aplica el comportamiento de la conversión vectorial a vector anterior. |
Matriz | Matriz | Conversión no válida si la matriz de destino tiene más componentes que la matriz de origen. La matriz de destino recibe los valores superior izquierdo de la matriz de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. Se pierden los componentes restantes de la parte inferior derecha de la matriz de origen. |
Matrix | Object | Conversión no válida. Las aplicaciones host deben devolver un error. |
Matriz | Estructura | El tamaño de la estructura debe ser igual al tamaño de la matriz y todos los componentes de la estructura deben ser numéricos. |
Object | Escalar | Conversión no válida. Las aplicaciones host deben devolver un error. |
Object | Vector | Conversión no válida. Las aplicaciones host deben devolver un error. |
Object | Matriz | Conversión no válida. Las aplicaciones host deben devolver un error. |
Object | Object | Válido si los tipos de los objetos son idénticos y de acuerdo con el comportamiento definido en La conversión de tipos. |
Estructura | Escalar | Válido si la estructura de origen contiene al menos un miembro numérico. El escalar de destino recibe el valor del primer miembro numérico de la estructura de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. |
Estructura | Vector | La estructura de origen debe ser al menos el tamaño del vector. Los primeros componentes deben ser numéricos hasta el tamaño del vector de destino. |
Estructura | Matriz | La estructura de origen debe ser al menos el tamaño del vector. Los primeros componentes deben ser numéricos hasta el tamaño del vector de destino. |
Estructura | Estructura | La estructura de destino no debe ser mayor que la estructura de origen. Una conversión válida debe existir entre todos los componentes de origen y destino respectivos. |
Modificadores de valor de parámetro
Las anotaciones modificadores de parámetro agregan información adicional a un parámetro para que los datos del parámetro se puedan interpretar correctamente. Por ejemplo, es posible que sea necesario expresar un vector con datos normalizados o una longitud se puede medir en pulgadas. Las anotaciones modificadores de valor de parámetro expresan esta información adicional para que las aplicaciones host puedan transformar los valores correctamente cuando los datos se transfieren a un parámetro de efecto.
Estos son los modificadores de parámetro:
Anotaciones modificadores de valor de parámetro | Descripción |
---|---|
SasNormalize | Especifique si un vector está normalizado o no. |
SasUnits | Especifique las unidades de medida de un parámetro. |
SasNormalize
La anotación SasNormalize indica que el parámetro asociado debe ser un valor normalizado cada vez que se asigna. Esta anotación solo afecta a los parámetros float2, float3 y float4.
string SasNormalize = "Value";
donde Value es True o False.
Este es un ejemplo:
float3 UpNormal
<
bool SasNormalize = "True";
>;
SasUnits
Los datos del parámetro de efecto están en las siguientes unidades:
string SasUnits = "Value";
donde Value es uno de los siguientes:
Tipo de medida | Valor | Descripción |
---|---|---|
Sin unidades | cadena vacía | Sin unidades |
Distancia | MM | Milímetros |
cm | Centímetros | |
m | Metros | |
km | Kilómetros | |
Ángulo | rad | Radians |
Time | ms | Milisegundos |
seg. | Segundos | |
min. | Minutos | |
h | Horas | |
Velocidad lineal | mm/s | Milímetros por segundo |
cm/s | Centímetros por segundo | |
m/s | Medidores por segundo | |
m/hr | Medidores por hora | |
km/hr | Kilómetros por hora | |
Aceleración lineal | mm/s² | Milímetros por segundo cuadrado |
cm/sec² | Centímetros por segundo cuadrado | |
m/s² | Metros por segundo cuadrado | |
m/hr² | Metros por hora cuadrado | |
km/hr² | Kilómetros por hora cuadrado | |
velocidad de Angular | rad/s | Radianes por segundo |
Aceleración de Angular | rad/sec² | Radianes por segundo cuadrado |
Área | mm² | Milímetros cuadrados |
cm² | Centímetros cuadrados | |
M² | Metros cuadrados | |
Km² | Kilómetros cuadrados | |
Volumen | mm³ | Milímetros cubos |
Cm³ | Centímetros cubos | |
M³ | Medidores cubos | |
km³ | Kilómetros en cubo |
Temas relacionados
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de