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


Функция D3DXSHEvalHemisphereLight (D3dx9math.h)

Примечание

Библиотека служебных программ D3DX (D3DX 9, D3DX 10 и D3DX 11) устарела и не поддерживается для приложений Магазина Windows.

Примечание

Вместо этой функции рекомендуется использовать функцию библиотеки сферических гармоникXMSHEvalHemisphereLight.

Оценивает свет, представляющий собой линейную интерполяцию между двумя цветами поверх сферы.

Синтаксис

HRESULT D3DXSHEvalHemisphereLight(
  _In_       UINT        Order,
  _In_ const D3DXVECTOR3 *pDir,
  _In_       D3DXCOLOR   Top,
  _In_       D3DXCOLOR   Bottom,
  _In_       FLOAT       *pROut,
  _In_       FLOAT       *pGOut,
  _In_       FLOAT       *pBOut
);

Параметры

Order [in]

Тип: UINT

Порядок вычисления сферической гармоники (SH). Должен находиться в диапазоне D3DXSH_MINORDER для D3DXSH_MAXORDER включительно. При вычислении создаются коэффициенты Order². Степень оценки — Order - 1.

pDir [in]

Тип: const D3DXVECTOR3*

Указатель на вектор направления оси полушария (x, y, z), в котором вычисляются базовые функции SH. См. заметки.

Начало [в]

Тип: D3DXCOLOR

Цвет неба.

Снизу [в]

Тип: D3DXCOLOR

Цвет земли.

pROut [in]

Тип: FLOAT*

Указатель на выходной вектор SH для красного компонента.

pGOut [in]

Тип: FLOAT*

Указатель на выходной вектор SH для зеленого компонента.

pBOut [in]

Тип: FLOAT*

Указатель на выходной вектор SH для синего компонента.

Возвращаемое значение

Тип: HRESULT

Если функция выполняется успешно, возвращаемое значение будет D3D_OK. Если функция завершается сбоем, возвращаемое значение может быть следующим: D3DERR_INVALIDCALL.

Комментарии

Интерполяция выполняется линейно между двумя точками, а не над поверхностью сферы (то есть, если ось была (0,0,1), она линейна в Z, а не в азимутальном углу). Результирующая функция сферического освещения нормализуется таким образом, чтобы точка на идеально рассеянной поверхности без затенения и нормальной направленности в направлении pDir привела бы к выходу сияния со значением 1 (если верхний цвет был белым, а нижний цвет был черным). Это очень простая модель, где Top представляет интенсивность "неба", а нижняя — интенсивность "земли".

На шаре с радиусом единицы, как показано на следующем рисунке, направление можно указать просто с помощью тета, угол относительно оси Z в правой руке и phi, угол от z.

Иллюстрация сферы с радиусом единицы

В следующих уравнениях показана связь между декартовыми координатами (x, y, z) и сферическими (theta, phi) координатами на единичной сфере. Угол теты меняется в диапазоне от 0 до 2 пи, а phi — от 0 до пи.

уравнения связи между декартовой и сферической координатами

Требования

Требование Значение
Заголовок
D3dx9math.h
Библиотека
D3dx9.lib

См. также раздел

Математические функции

Предварительно вычисляемая передача radiance (Direct3D 9)