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

