Второе действие, выполняемое функцией CreateScene(),— создание источника зонального света:
LPDIRECT3DRMLIGHT slight; d3drm->CreateLightRGB(D3DRMLIGHT_SPOT, D3DVALUE(1.00), D3DVALUE(1.00), D3DVALUE(1.00), &slight);
Функция CreateLightRGB() интерфейса Direct3DRM применяется для создания источника света slight (s — сокращение от spotlight, т.е. прожектор). Константа D3DRMLIGHT_SPOT задает тип создаваемого источника света. Другие возможные значения — D3DRMLIGHT_AMBIENT, D3DRMLIGHT_DIRECTIONAL, D3DRMLIGHT_PARALLELPOINT и D3DRMLIGHT_POINT.
Затем создается фрейм с именем slightframe:
LPDIRECT3DRMFRAME slightframe; d3drm->CreateFrame(scene, &slightframe);
Этот фрейм, аналогично фрейму конструктора сеток, использует в качестве родителя фрейм scene. Затем, посредством функции SetPosition() задается местоположение нового фрейма:
slightframe->SetPosition (scene, D3DVALUE(0),D3DVALUE(20),D3DVALUE(-20));
Первый аргумент задает систему координат, а остальные указывают новое местоположение фрейма. Функция SetPosition() для определения нового местоположения фрейма использует систему координат указанного фрейма. В данном примере в качестве системы координат используется корневой фрейм сцены, поэтому задающие местоположение значения указывают абсолютную позицию. Корневой фрейм расположен в начале координат, поэтому источник света будет помещен на 20 единиц выше начала координат и на 20 единиц позади. Если бы, например, мы указали те же самые значения, но в качестве системы координат задали фрейм, расположенный в точке <0, 100, 0>, позиция нового фрейма была бы <0, 120, –20>.
Далее, с помощью функции SetOrientation() задается ориентация фрейма slightframe:
slightframe->SetOrientation(scene, D3DVALUE(0), D3DVALUE(-20), D3DVALUE(20), D3DVALUE(0), D3DVALUE(1), D3DVALUE(0));
Подобно функции SetPosition(), функция SetOrientation() требует, чтобы в качестве первого аргумента передавалась ссылка на фрейм, однако, SetOrientation() требует наличия шести дополнительных аргументов.