Структура данных UUSL
Поля данных#
Data имеет следующие поля (значения в мировом пространстве имеют постфикс _w):
struct Data {
float depth;
float3 position;
float3 view;
float3 normal;
float3 reflection;
// world space values
float3 view_w;
float3 normal_w;
float3 reflection_w;
float3 sky_reflect;
float2 screen_coord;
float dotNV;
float dielectric;
float gloss;
};
Функции Data#
Data dataDefault ( ) #
Конструктор по умолчанию для структуры Data. Он создает экземпляр со значениями по умолчанию (не нулевыми).Возвращаемое значение
Структура Data со значениями по умолчанию (не нулевыми).void dataSetPosition ( inout Data Data, float3 pos ) #
Вычисляет значения позиции, глубины и просмотра для данной структуры Data.Аргументы
- inout Data Data - Структура Data для заполнения.
- float3 pos - Вектор положения.
void dataCalculateWorldSpace ( Data Data ) #
Вычисляет мировоззрение, нормальное отражение, отражение в мировом пространстве, используя соответствующие значения данной структуры Data.Аргументы
- Data Data - Структура Data для заполнения.
void dataSetGbuffer ( inout Data Data, GBuffer gbuffer ) #
Устанавливает нормальные, диэлектрические и глянцевые значения структуры данных, используя соответствующие значения данного экземпляра GBuffer.Аргументы
- inout Data Data - Структура Data.
- GBuffer gbuffer - Экземпляр GBuffer с необходимыми значениями, которые необходимо установить.
void dataCalculateAll ( inout Data data, GBuffer gbuffer, float3 pos, float2 screen_coord ) #
Вычисляет все значения для структуры Data.Аргументы
- inout Data data - Структура Data для заполнения вычисленными значениями.
- GBuffer gbuffer - Структура GBuffer.
- float3 pos - Вектор положения.
- float2 screen_coord - Координаты экрана.
Пример использования#
Чтобы использовать структуру Data в коде шейдера, вы должны определить и инициализировать структуру Data и заполнить ее.
В следующем примере показан способ создания структуры данных и вычисления ее значений.
/* ... */
// input structure for fragment shader
STRUCT(FRAGMENT_IN)
INIT_POSITION
INIT_IN(float4,0)
INIT_IN(float3,1)
INIT_IN(float3x3,2)
#ifdef USE_ALPHA_FADE && ALPHA_FADE
INIT_IN(float,9)
#endif
END
/* ... */
// in the main function of fragment shader
// GBuffer
GBuffer gbuffer;
/* fill the GBuffer struct */
Data data;
dataCalculateAll(data,gbuffer,IN_DATA(1),IN_POSITION.xy);
/* ... */
Последнее обновление:
11.11.2020
Помогите сделать статью лучше
Была ли эта статья полезной?
(или выберите слово/фразу и нажмите Ctrl+Enter