Поделиться через


Приведение и преобразование

При передаче значений между ведущим приложением и параметром эффекта данные записываются должным образом, если исходный тип данных (в ведущем приложении) соответствует целевому типу данных (в параметре effect). Если типы данных различаются, приведение будет выполняться при переупорядочении исходных данных в соответствии с назначением.

DXSAS определяет следующие правила преобразования типов. Это надмножество правил преобразования типов эффекта (.fx) и HLSL. DXSAS также определяет некоторые модификаторы значения параметра , которые могут влиять на значение, передаваемое из ведущего приложения в связанный параметр.

Приведение типа

В следующей таблице перечислены приведение, которое будет происходить при передаче одного типа данных другому типу данных.

Тип источника Тип назначения Поведение
FLOAT INT Округление к нулю.
float, int bool Значения, не равные 0 , на основе сравнения с 0 (int) или 0,0 (float) считаются истинными, в противном случае значение считается false.
INT FLOAT
bool int, float Значение False преобразуется в ноль. Значение True преобразуется в один.
texture1D, texture2D, texture3D, textureCUBE текстура Текстура назначения рассматривается как тип исходной текстуры.
строка texture1D, texture2D, texture3D, textureCUBE Строковое значение обрабатывается как адрес ресурса и разрешается так же, как и заметка инициализации параметра. Если адрес ресурса не может быть разрешен, приведение является недопустимым и ведущее приложение должно вернуть ошибку. Если ресурс разрешается правильно, тип выражения обрабатывается как тот же тип, что и разрешенный ресурс.

 

Приведение классов

В дополнение к описанным выше правилам приведения типов DXSAS определяет набор правил приведения, необходимых для преобразования между типами классов. Матрицы столбцов (N x 1), матрицы строк (1 x N) и числовые структуры обрабатываются как векторы.

Параметры матрицы эффектов и матричные переменные HLSL могут определять, является ли значение матрицей со строками или столбцами; Однако API DirectX всегда обрабатывают D3DMATRIX и D3DXMATRIX как основные строки.

Исходный класс Класс назначения Поведение
скалярная скалярная Примените приведение типов.
скалярная Вектор Реплицируйте скалярное исходное значение в каждый компонент вектора назначения после применения поведения приведения и преобразования типов, описанных в разделе Приведение типов.
скалярная Матрица Реплицируйте скалярное исходное значение в каждый компонент целевой матрицы после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов.
скалярная Объект Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
скалярная Структура Допустимо, только если целевая структура содержит только числовые элементы. Если значение является допустимым, реплицируйте скалярное исходное значение в каждый компонент целевой структуры после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов.
Вектор скалярная Целевой скаляр получает значение первого компонента исходного вектора после применения поведения приведения и преобразования типов, описанных в разделе Приведение типов.
Вектор Вектор Недопустимое приведение, если вектор назначения содержит больше компонентов, чем исходный вектор. Конечный вектор получает самые левые значения исходного вектора после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов. Остальные самые правые компоненты исходного вектора теряются.
Вектор Матрица Недопустимое приведение, если исходный вектор не содержит то же количество компонентов, что и матрица назначения. Если приведение является допустимым, применяется поведение приведения вектора к вектору.
Вектор Объект Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
Вектор Структура Допустимо, только если целевая структура содержит только числовые элементы и не содержит больше элементов, чем исходный вектор имеет компоненты. Элементы целевой структуры получают большинство левых компонентов исходного вектора после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов.
Матрица скалярная Целевой скаляр получает значение верхнего левого значения исходной матрицы после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов.
Матрица Вектор Недопустимое приведение, если исходная матрица не содержит то же количество компонентов, что и целевой вектор. Если приведение является допустимым, применяется поведение приведенного выше приведения вектора к вектору.
Матрица Матрица Недопустимое приведение, если целевая матрица содержит больше компонентов, чем исходная матрица. Конечная матрица получает верхние левые значения исходной матрицы после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов. Остальные нижние правые компоненты исходной матрицы теряются.
Матрица Объект Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
Матрица Структура Размер структуры должен быть равен размеру матрицы, а все компоненты структуры должны быть числовыми.
Объект скалярная Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
Объект Вектор Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
Объект Матрица Недопустимое приведение. Ведущее приложение должно возвращать ошибку.
Объект Объект Допустимо, если типы объектов идентичны и соответствуют поведению, определенному в разделе Приведение типов.
Структура скалярная Допустимо, если исходная структура содержит по крайней мере один числовой элемент. Целевой скаляр получает значение первого числового элемента исходной структуры после применения поведения приведения типов и преобразования, описанного в разделе Приведение типов.
Структура Вектор Исходная структура должна быть по крайней мере размером вектора. Первые компоненты должны быть числовыми до размера целевого вектора.
Структура Матрица Исходная структура должна быть по крайней мере размером вектора. Первые компоненты должны быть числовыми до размера целевого вектора.
Структура Структура Структура назначения не должна быть больше исходной структуры. Между всеми соответствующими компонентами источника и назначения должно существовать допустимое приведение.

 

Модификаторы значения параметра

Заметки модификатора параметра добавляют в параметр дополнительные сведения, чтобы данные параметра могли быть правильно интерпретированы. Например, вектор может быть выражен нормализованными данными или длина может быть измерена в дюймах. Заметки модификатора значения параметра выражают эту дополнительную информацию, чтобы ведущее приложение я велкорректно преобразовывывал значения при передаче данных в параметр эффекта.

Ниже приведены модификаторы параметров:

Заметки модификатора значения параметра Описание
SasNormalize Укажите, является ли вектор нормализованным.
SasUnits Укажите единицы измерения для параметра.

 

SasNormalize

Заметка SasNormalize указывает, что связанный параметр должен быть нормализованным значением при каждом назначении. Эта заметка влияет только на параметры float2, float3 и float4.

string SasNormalize = "Value";

Где значение равно True или False.

Вот пример:

float3 UpNormal
<
  bool SasNormalize = "True";
>;

SasUnits

Данные параметра эффекта представлены в следующих единицах:

string SasUnits = "Value";

Где Значение имеет одно из следующих значений:

Тип измерения Значение Описание
Нет единиц пустая строка Нет единиц
Расстояние ММ Миллиметры
cm Сантиметры
m Единицы измерения
km Километры
Angle rad Radians
Time ms Миллисекунды
Сек Секунды
мин Минуты
ч Часы
Линейная скорость мм/с Миллиметров в секунду
см/с Сантиметров в секунду
м/с Счетчиков в секунду
м/ч Счетчиков в час
км/ч Километров в час
Линейное ускорение мм/с² Миллиметров в секунду в квадрате
cm/sec² Сантиметров в секунду в квадрате
м/с² Метров в секунду в квадрате
м/ч² Метры в час в квадрате
км/ч² Километров в час в квадрате
Скорость Angular rad/sec Радиан в секунду
Ускорение Angular rad/sec² Радиан в секунду в квадрате
Область мм 2 Миллиметры в квадрате
cm² Сантиметры в квадрате
М ² Метры в квадрате
Km² Километров в квадрате
Громкость mm² Миллиметры в кубе
См ³ Сантиметры в кубе
М ³ Единицы измерения в кубах
km² Километров в кубе

 

Справочник по стандартным заметкам и семантике DirectX