ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



         

Свет и тень - часть 10


m_pScene-»m_ShapeList .Append (pCast) ;

pCast-»SetPosition(0, 1, 0) ;

MakeCurrent(pCast) ;

// Создать тень, слегка приподнятую над плоскостью

Тени

/h2>

CSctVector pt(0, -1.9, 0); // Точка плоскости

C3dVector normal(0, 1, 0); // Нормаль к плоскости

pCast-»Create3hadow(pLight, pt, normal);

i

Функция C3dShape::CreateShadow создает визуальный элемент тени по нескольким аргументам: текущему источнику света, точке плоскости, на которую отбрасывается тень, нормали к этой плоскости:

BOOL CSdShape::CreateShadow(C3dLight* pLight,

D3DVECTOR& vPt,

D3DVECTOR& vN) {

IDirect3DRMVisual* pIVisual = NULL;

m_hr =

the3dEngine.Getlnterface()-»CreateShadow(GetVisual(), pLight-»GetLight () , vPt.x, vPt.y, vPt.z, vN.x, vN.y, vN.z, SpIVisual);

ASSERT(SUCCEEDED(m_hr)) ;

// Присоединить тень к фрейму ASSERT(m_pIFrame) ;

m_hr = m_pIFrame-»AddVisual (pIVisual) ;

return SUCCEEDED(m_hr);

)

Поскольку тень является таким же визуальным объектом, как и любая другая фигура макета, следует соблюдать осторожность при задании плоскости, на которую она должна проектироваться. Убедитесь, что эта плоскость слегка приподнята над поверхностью, на которую должна отбрасываться тень. Если эта плоскость совпадет с гранью объекта, пиксели перемешаются и результат будет непредсказуемым. Тень, слегка приподнятая над поверхностью, выглядит вполне нормально и четко.

Обратите внимание — тень может проектироваться только на одну плоскость. Вы не сможете загнуть ее за угол или перенести на смежную грань куба. Кроме того, проекционная плоскость считается бесконечной. В демонстрации, изображенной на Рисунок 10-9, перемещение источника света или фигуры выводит тень за пределы поверхности, на которую она проектируется. Кроме того, можно протащить фигуру сквозь поверхность вниз, а тень при этом останется наверху.

Разумеется, тени повышают реализм изображения, однако пользоваться ими следует осторожно, чтобы не разрушить иллюзию. На Рисунок 10-10 изображено окно приложения Globe, рассмотренного в главе 13, в котором тень применяется для улучшения общего вида макета (кроме того, посмотрите на цветной вариант этого рисунка на вкладке).

9АЯ -flaSi^' ГПОП-Э 1П Г^аат 1Л TQLJL

Рисунок. 10-10. Приложение Globe с тенью


Итоги

Различные типы освещения могут значительно улучшить внешний вид макета. Поскольку для некоторых источников света требуются более сложные расчеты, необходимо разумно выбирать тип освещения в тех случаях, когда важна высокая скорость работы приложения. Цветные источники света применяются для создания специальных эффектов, но не забывайте о том, что работать с ними можно только в RGB-модели. Наконец, тени также повышают реализм изображения, но они ограничены всего одной плоскостью.




Содержание  Назад  Вперед