Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 10:

Введение в 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. Отключение варианта использования источника света
  • Запустите приложение и должен получиться нормальный цветной треугольник как раньше


Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000