Привязка данных
Используйте sasHostParameterValue Collection , чтобы определить коллекцию значений ведущего приложения, а также их тип и члены, доступные для эффектов. Используйте заметку SasBindAddress в файле эффекта, чтобы связать параметр эффекта с соответствующим параметром в ведущем приложении.
Коллекция SasHostParameterValue
Значение SasHostParameterValue определяется с помощью синтаксиса файла эффектов (FX). Хотя синтаксис очень похож на синтаксис файла эффекта, существуют некоторые различия. Например, типы объектов, такие как texture2d, samplers и string, недопустимы в фактических файлах эффектов, но допустимы в SasHostParameterValue. Ведущее приложение может реализовать SasHostParameterValue любым способом, если оно соответствует описанию ниже. фактическое определение находится в файле включения стандартного эффекта DXSAS ([корневой каталог SDK]/Utilities/Source/Sas.fxh).
Обратите внимание, что массивы в SasHostParameterValue, такие как Lights или Камеры, имеют граничную длину. Это означает, что эффекты могут привязываться к любому произвольному индексу в этих массивах, и в ведущих приложениях должны предоставляться значимые значения по умолчанию в тех случаях, когда значение приложения не может быть предоставлено.
Некоторые типы и константы должны быть определены в стандарте DXSAS, как указано в определении стандартного включения. Это позволяет эффектам легко привязать агрегированные значения из SasHostParameterValue к параметрам структурированного эффекта.
Коллекция SasHostParameterValue | Type | Член |
---|---|---|
Время | FLOAT | Sas.Time.Now |
FLOAT | Sas.Time.Last | |
INT | Sas.Time.FrameNumber | |
Схема среды | textureCUBE | Sas.EnvironmentMap |
Камера | SasCamera | Sas.Camera |
float4x4 | Sas.Camera.WorldToView | |
float4x4 | Sas.Camera.Projection | |
float2 | Sas.Camera.NearFarClipping | |
Светлый | SasAmbientLight | AmbientLight[ZeroOrMore]; |
INT | Sas.NumAmbientLights | |
SasAmbientLight | DirectionalLight[ZeroOrMore]; | |
INT | Sas.NumDirectionalLights | |
SasAmbientLight | PointLight[ZeroOrMore]; | |
INT | Sas.NumPointLights | |
SasAmbientLight | SpotLight[ZeroOrMore]; | |
INT | Sas.NumSpotLights | |
Shadow | float4x4 | Sas.Shadow[ZeroOrMore]. WorldToShadow |
texture2D | Sas.Shadow[ZeroOrMore]. ShadowMap | |
Скелет | float4x4 | Sas.Skeleton.MeshToJointToWorld[OneOrMore] |
INT | Sas.Skeleton.NumJoints |
Time
Значение виртуальных часов или времени ведущем приложении. К участникам относятся:
- Sas.Time.Now — значение виртуальных часов ведущего приложения в точке, в которой будет отображаться эффект.
- Sas.Time.Last — значение Now при предыдущей отрисовки.
- Sas.Time.FrameNumber — значение счетчика, которое увеличивается один раз за отрисованный кадр.
Эффекты должны правильно обрабатывать тот факт, что значения этих элементов потенциально могут быть оболочкой в течение очень длительного времени выполнения. Значения Now и Last могут иметь очень большие значения.
Схема среды
Кубическая карта среды. Ведущее приложение должно предоставлять допустимую текстуру куба, если эффект пытается выполнить привязку к Sas.EnvironmentMap.
Камера
Камера, на которой сейчас выполняется отрисовка. К участникам относятся:
- Sas.Camera.WorldToView — составная матрица для просмотра мира для камеры.
- Sas.Camera.Projection — матрица проекции для камеры.
- Sas.Camera.NearFarClipping — значения ближней и дальней обрезки плоскостей.
Светлая
Один или несколько источников света сцены. Коллекция индикаторов объявляется как массив, в котором:
- Color — цвет RGB. Значение по умолчанию — (0,0,0).
- Направление — направление света. Значение по умолчанию — (0,0,0).
- Диапазон — расстояние от света, где лучи света не оказывают влияния на сцену. Значение по умолчанию — 0.
- Тета - внутренний угол конуса прожектора, измеряемый в радианах. Значение по умолчанию — 0.
- Фи — внешний угол конуса прожектора, измеряемый в радианах. Значение по умолчанию — 0.
Для количества огней должно быть задано количество огней, привязанных к связанному массиву. Эффекты могут игнорировать количество огней и привязывать к любому элементу одного из массивов света. Таким образом, ведущее приложение должно предоставлять допустимую привязку для элементов, превышающих число огней в массиве.
ZeroOrMore подразумевает, что массив может содержать любое количество элементов.
Shadow
Теневые буферы, состоящие из:
- WorldToShadow — массив матриц.
- ShadowMap — двухd-файл текстуры.
ZeroOrMore подразумевает, что массив может содержать любое количество элементов (ноль означает пустой массив).
Эффект объявит дискретизатор следующим образом:
texture2D Shadow
<
string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;
sampler ShadowSampler = shadow_sampler(Shadow);
Скелет
Набор кадров, составляющих текущий отрисовываемый объект. Примерами кадров являются кости и преобразования. В том числе:
- MeshToJointToWorld — массив матриц.
- NumJoints — количество суставов в скелете.
OneOrMore подразумевает, что массив содержит по крайней мере один и может содержать любое количество элементов.
Определение поддерживает как объекты жесткой сетки, так и объекты сетки с обложкой, используя один и тот же набор значений коллекции SasHostParameterValue с разной интерпретацией.
SasBindAddress
Эта заметка добавляется в начало файла эффектов, чтобы связать параметр эффекта с соответствующим параметром, определенным в коллекции SasHostParameterValue. Заметка объявляется следующим образом:
string SasBindAddress = "SasHostParameterValue";
В этом примере матрица мира эффектов привязывается к матрице MeshToJointToWorld:
float4x3 World
<
string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;
Эта заметка сообщает ведущему приложению, что ему необходимо задать значение матрицы мира эффекта, используя данные в матрице MeshToJointToWorld.
Синтаксис аннотации адреса привязки был определен как очень похожий на синтаксис, используемый ID3DXEffect для получения и задания параметров эффекта. Единственное различие между грамматикой DXSAS и методами ID3DXEffect заключается в добавлении маркера индекса звездочки. Вот еще один пример использования индекса звездочки:
float3 LightColors[6]
<
string SasBindAddress = "Sas.Light[*].Color";
>;
Маркер индекса звездочки указывает, что все элементы определенного массива значений envirnmant узла (в данном случае цвет) должны быть привязаны к связанному параметру. Несколько маркеров индекса звездочки позволяют эффектам привязываться к подэлепам массива структур без необходимости привязки всей структуры. В этом примере значения цвета первых шести огней привязываются к параметру эффекта.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по