Введение в DirectX
Добавление камеры
Кроме задания области визуализации в проект нужно добавить саму камеру. имеет вид
public static Microsoft.DirectX.Matrix.LookAtLH( Microsoft.DirectX.Vector3 cameraPosition, // Положение камеры Microsoft.DirectX.Vector3 cameraTarget, // Положение объекта Microsoft.DirectX.Vector3 cameraUpVector) // Направление камерыЛистинг 10.10. Общий синтаксис функции камеры
Теперь у нас достаточно информации, чтобы отобразить объект во внешних координатах.
- Добавьте в класс Form1 новый метод SetupCamera() и запакуйте в него следующий код
// Установка камеры в сцену private void SetupCamera() { //Создание перспективы device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4, // Угол зрения равен 45 градусов // Форматное соотношение сторон (float)this.ClientSize.Width / (float)this.ClientSize.Height, 1.0F, // Ближний план 100.0F); // Дальний план //Добавление камеры device.Transform.View = Matrix.LookAtLH( new Vector3(0, 0, 5.0F), // Положение камеры new Vector3(), // Положение объекта текущее new Vector3(0, 1, 0)); // Направление камеры }Листинг 10.11. Установка в сцену камеры просмотра
- Поместите в методе OnPaint() класса Form1 сразу после вызова метода очистки Clear() вызов функции SetupCamera()
protected override void OnPaint(PaintEventArgs e) { // Очистить цветом клиентскую область формы device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0F, 0); // Вызов нашей функции установки камеры SetupCamera(); ............................................... }Листинг 10.12. Вызов функции установки камеры в методе OnPaint()
- Запустите приложение и должен получиться следующий результат
Отключение потребности в освещении сцены
Мы получили наш первоначальный треугольник, но теперь он окзался весь черный, хотя мы определили цвета вершин. Проблема заключается в различии треугольника в преобразованных и непреобразованных координатах. В непреобразованной среде Direct3D по умолчанию использует освещение, чтобы определить итоговый цвет писксела каждого примитива в сцене. Поскольку мы не использовали никакого освещения в нашей сцене, то все пикселы треугольника оказались черными. Самый простой способ пока - вообще отключить возможность использование источника света в нашей сцене, задав соответствующее значение параметра состояния рендеринга.
- Добавьте в конец функции SetupCamera() код отключения освещения
// Установка камеры в сцену private void SetupCamera() { //Создание перспективы device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4, // Угол зрения равен 45 градусов // Форматное соотношение сторон (float)this.ClientSize.Width / (float)this.ClientSize.Height, 1.0F, // Ближний план 100.0F); // Дальний план //Добавление камеры device.Transform.View = Matrix.LookAtLH( new Vector3(0, 0, 5.0F), // Положение камеры new Vector3(), // Положение объекта текущее new Vector3(0, 1, 0)); // Направление камеры // Освещение не используем device.RenderState.Lighting = false; }Листинг 10.13. Отключение варианта использования источника света
- Запустите приложение и должен получиться нормальный цветной треугольник как раньше