Программирование графики с использованием Direct3D




Глава 6


    Глава 6. Источники света и тени
    Рассеянное освещение Точечный источник света Направленное освещение Параллельное освещение Прожектор Работа с несколькими источниками света Тени Вы уже получили немного информации об источниках св...
    Методы визуализации и цветовые модели
    Прежде чем говорить о различных типах источников света, необходимо рассмотреть различия между методом визуализации и цветовой моделью, и обсудить, как они влияют на источники света. Метод визуализ...
    Рассеянный свет
    В реальном мире рассеянный свет является отраженным светом. Рассеянный свет это свет, который был отражен и рассеян в окружающем пространстве. Например, вечером рассеянный свет позволяет нам видет...
    Демонстрация рассеянного света
    Откровенно говоря, рассеянный свет довольно скучная вещь. Он полезен, особенно когда применяется совместно с источниками света других типов, но сам по себе рассеянный свет весьма невыразителен. По...
    Класс AmbientLightWin
    Львиная доля функциональности нашего проекта сосредоточена в классе AmbientLightWin. Определение этого класса выглядит следующим образом: class AmbientLightWin : public RMWin { public: AmbientLigh...
    Функция AmbientLightWin::CreateScene()
    Сцена создается в функции CreateScene(). Если вы назвали проект AmbientLight, функция CreateScene() будет выглядеть подобно показанной в листинге 6.1. Листинг 6.1. Функция AmbientLightWin::CreateS...
    Функции меню Render
    Одна из возможностей, которую мастер Direct3D AppWizard добавляет в проект (независимо от того, просите вы об этом или нет) это меню Render , позволяющее изменить метод визуализации сетки во время...
    Точечный свет
    Точечный источник света испускает лучи света из одной точки во всех направлениях. Он подобен источникам света, к которым мы привыкли в обычной жизни, например, электрической лампочке. Привычное по...
    Приложение Firefly
    В приложении Firefly точечный источник света применяется для освещения чаши. Чаша помешена в начало координат, а источник света перемещается вокруг нее. Вместе с источником света перемещается небо...
    Класс FireflyWin
    Основная функциональность приложения Firefly реализована в классе FireflyWin, наследуемом от класса RMWin. Определение класса выглядит следующим образом: class FireflyWin : public RMWin { public:...
    Функция FireflyWin::CreateScene()
    В приложении Firefly создание сцены осуществляется в функции CreateScene(). Функция отвечает за создание двух сеток: одной для чаши и одной для светлячка. Кроме того, в ней создается один точечный...
    Направленный свет
    Направленный свет является противоположностью точечного света. В то время, как точечный свет имеет местоположение, но не имеет ориентации, направленный свет имеет ориентацию, но не имеет местополо...
    Приложение SpaceStation
    Поскольку направленный свет хорошо подходит для представления удаленных источников света, следующая демонстрация будет проведена в космосе. Приложение SpaceStation отображает космическую станцию,...
    Класс SpaceStationWin
    Основная функциональность приложения SpaceStation сосредоточена в классе SpaceStationWin. Определение этого класса выглядит следующим образом: class SpaceStationWin : public RMWin { public: SpaceS...
    Функция SpaceStationWin::CreateScene()
    Приложение SpaceStation это одна из самых простых демонстрационных программ на CD-ROM. В приложении используется одна сетка и один источник света, и нет никаких функций обратного вызова или тексту...
    Параллельно-точечный свет
    Источник параллельно-точечного света подобен источнику направленного света, но испускает лучи в двух направлениях. На параллельно-точечный источник света оказывают влияние и его местоположение, и...
    Приложение SpaceDonut
    В приложении SpaceDonut параллельно-точечный источник света размещен между двумя пончиками с малиновой (а может быть черничной) глазурью. Окно приложения SpaceDonut показано на рис.6.7. Рис. 6.7....
    Класс SpaceDonutWin
    Основная функциональность приложения SpaceDonut сосредоточена в классе SpaceDonutWin, объявление которого выглядит следующим образом: class SpaceDonutWin : public RMWin { public: SpaceDonutWin();...
    Функция SpaceDonutWin::CreateScene()
    Сцена приложения SpaceDonut создается функцией CreateScene(), код которой приведен в листинге6.4. Листинг 6.4. Функция SpaceDonutWin::CreateScene() BOOL SpaceDonutWin::CreateScene() { // ------- С...
    Прожектор
    Прожектор излучает свет в форме конуса. Местоположение источника света влияет на местоположение вершины конуса, а ориентация источника света влияет на местоположение основания светового конуса. В...
    Приложение Spotlight
    В приложении Spotlight анимированный прожектор освещает три сферических сетки. Угол светового пятна и угол зоны освещенности прожектора могут быть изменены во время работы программы с помощью кома...
    Класс SpotlightWin
    Приложение Spotlight использует класс RMWin в качестве базового для своего собственного класса SpotlightWin: class SpotlightWin : public RMWin { public: SpotlightWin(); BOOL CreateScene(); protect...
    Функция SpotlightWin::CreateScene()
    Функция CreateScene() приложения Spotlight отвечает за создание сеток и прожектора, а также устанавливает функцию обратного вызова, использующуюся для анимации прожектора. Код функции SpotlightWin...
    Функция SpotlightWin::MoveLight()
    В функции CreateScene() приложения Spotlight выполняется установка функции обратного вызова MoveLight(), осуществляющей изменение ориентации фрейма прожектора при каждом обновлении изображения на...
    Функции меню Render приложения Spotlight
    Ранее в этой главе, когда мы изучали источник рассеянного света и создавали приложение AmbientLight, мы рассмотрели шесть функций, необходимых для реализации меню Render . В них мы использовали фу...
    Функции меню Beam приложения Spotlight
    Приложение Spotlight предоставляет пользователю меню Beam , позволяющее изменить угол светового пятна и угол зоны освещенности прожектора. Шесть функций, реализующих эту функциональность, показаны...
    Работа с несколькими источниками света
    Каждое из демонстрационных приложений, рассмотренных в этой главе к данному моменту, было предназначено, чтобы ознакомить вас с определенным типом источников света. Чтобы ясно показать особенности...
    Тени
    Данная глава называется Источники света и тени, и мы уже обсудили пять типов источников света, поддерживаемых Direct3D, теперь настало время поговорить о тенях. Однако перед тем, как начать, следу...
    Приложение Shadow
    Приложение Shadow создает сцену, в которой вилка висит над прямоугольной площадкой. Источник света освещает вилку и площадку, и вилка отбрасывает тень (или, кажется, что отбрасывает). Окно приложе...
    Класс ShadowWin
    Основная функциональность приложения Shadow предоставляется классом ShadowWin: class ShadowWin : public RMWin { public: ShadowWin(); BOOL CreateScene(); protected: //{{AFX_MSG(ShadowWin) afx_msg v...
    Функция ShadowWin::CreateScene()
    Сцена создается функцией CreateScene(), код которой представлен в листинге6.6. Листинг 6.6. Функция ShadowWin::CreateScene() //------------- СЕТКА ПОЛА -------- D3DRMLOADRESOURCE resinfo; resinfo....
    Функция ShadowWin::AdjustSpin()
    Функция AdjustSpin() является функцией обратного вызова, которая периодически изменяет атрибуты вращения фрейма вилки. Для генерации случайного вектора в ней используется функция D3DRMVectorRandom...
    Функции меню Render приложения Shadow
    Осталось обратить внимание еще на одну особенность приложения Shadow. Обработчики событий меню Render должны изменять параметры двух конструкторов сеток, а не одного, как в других приложениях. Ниж...
    Заключение
    Надеюсь, теперь вы узнали об источниках света и тенях в Direct3D все, что хотели. Возможно, вы даже узнали больше , чем намеревались! В главе7 мы расстанемся с использованием простейшей анимации (...









Начало        




Книжный магазин