| Россия, г. Новочеркасск |
Рендеринг вращающихся кубов в DirectX
Файлы к лабораторной работе Вы можете скачать
здесь.
Вся геометрия в трехмерной сцене составляется из графических примитивов, которые называют полигонами. В качестве полигонов чаще всего применяются треугольники. В этой работе мы будем аппроксимировать кубы с помощью треугольников. Любой квадрат, прямоугольник или параллелепипед можно сложить из двух треугольников. Соответственно куб можно создать из шести квадратов. Поскольку куб имеет восемь угловых вершин, их координаты и будут определять треугольники соответствующих граней.
Создание заготовки приложения
Чтобы не создавать приложение с нуля, мы воспользуемся результатами работы №10 и некоторыми предварительными преобразованиями подготовим ее для решения поставленной задачи.
-
Создайте
новый пустой проект с именем RenderCube типа C#
-
Вызовите
контекстное меню для имени проекта или узла References в
панели Solution Explorer (или в меню Project оболочки),
чтобы открыть окно добавления ссылок на необходимые для
проекта библиотеки DLL
-
Добавьте
к проекту, удерживая клавишу Ctrl, ссылки на библиотеки
-
В
панели Solution Explorer выделите узел проекта и с помощью
команды Add
Existing Item меню Project оболочки
добавьте к проекту файлы Form1.cs и Program.cs из лабораторной работы №10
Файл Form1.Designer.cs является подчиненным файлу Form1.cs и скопируется оболочкой автоматически.
Оболочка скопирует эти файлы в каталог размещения нового проекта.
-
Убедитесь,
что на данном этапе панель Solution Explorer проекта выглядит
так
-
Вызовите
окно Find and Replace комбинацией клавиш Ctrl-H (или командой Edit/Find and Replace/Quick Replace ),
настройте его в соответствии с рисунком и щелкните на кнопке Replace All
Оболочка выполнит во всех файлах замену пространства имен SimpleMedia на RenderCube. Это действие нужно для того, чтобы классы приложения находились в одном (уже новом) пространстве имен и видели друг друга.
Для того, чтобы упростить задачу - не задавать координаты нормалей, настроим наш код на работу без источника света. Для этого вместо режима использования структуры PositionNormalColored нужно применить структуру PositionColored и отключить источник света.
-
Откройте
файл Form1.cs в режиме View Code,
вызовите окно Find
and Replace комбинацией
клавиш Ctrl-H и при настройке Currend Document выполните
замену PositionNormalColored на PositionColored
-
Через
раскрывающийся список Members редактора
кода позиционируйтесь на обработчике vb_Created() и
удалите из него код создания нормалей к вершинам
треугольника
// Дополнить вершины параметрами нормалей
verts[0].SetNormal(new Vector3(0.0F, 0.0F, -1.0F));
verts[1].SetNormal(new Vector3(0.0F, 0.0F, -1.0F));
verts[2].SetNormal(new Vector3(0.0F, 0.0F, -1.0F));
Листинг
12.1.
Удаляемый код создания нормалей в обработчике vb_Created()
-
Удалите
из функции OnPaint() код настройки источника света
// Настроить параметры света источника с номером 0
device.Lights[0].Type = LightType.Point; // Точечный источник
// По умолчанию (0,0,0) - источник в начале координат
device.Lights[0].Position = new Vector3();
// Свет диффузионный белый
device.Lights[0].Diffuse = System.Drawing.Color.White;
// Затухание света при удалении
device.Lights[0].Attenuation0 = 0.2f;
// Дальность освещения, поддерживаемая устройством
device.Lights[0].Range = 1000.0f;
// Принять настройки
device.Lights[0].Commit();
// Установить активным
device.Lights[0].Enabled = true;
Листинг
12.2.
Удаляемый код настройки источника света в функции OnPaint()
-
В
функции SetupCamera() отключите освещение
сцены, установив флаг device.RenderState.Lighting конвейера
в состояние false
-
Установите
режим Release работы компилятора и
запустите приложение, чтобы проверить, что на данном
этапе оно функционирует
нормально
Мы видим, что одновременно запускаются два окна: консольное и графическое. Отключим консольное окно.
-
В
панели Solution Explorer для узла проекта вызовите контекстное
меню и выполните команду Properties
-
Для
вкладки Application окна свойств проекта
установите свойство Output
type в
значение Windows
Application и закройте это окно свойств
На этом подготовительный этап к выполнению данной лабораторной работы завершен.








