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


Привязка данных

Используйте 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 узла (в данном случае цвет) должны быть привязаны к связанному параметру. Несколько маркеров индекса звездочки позволяют эффектам привязываться к подэлепам массива структур без необходимости привязки всей структуры. В этом примере значения цвета первых шести огней привязываются к параметру эффекта.

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