Работа с Managed DirectX 9 в C# (Csharp)

  В этой статье я продемонстрирую вам как создавать с помощью Csharp (C#) приложения Managed DirectX. В последнее время, где речь заходит о Managed DirectX, упоминается книга Том Миллер "Managed DirectX 9", прочитав которую и написав первый пример, я не получил рабочую программу. Эта статья призвана внести ясность и прочитав которую вы сможете написать приложение, которое будет выводить вот такую вот картинку:

  Это своеобразное "Hello World!" в мире разработок игр. Для того чтобы создать такое приложение нам понадобится Managed DirectX , который можно скачать на www.microsoft.com.
  Приступим к программированию. Запускаем по привычке Visual Studio 2005 и создаем новый проект на Visual C# (Csharp). далее, подключаем в пространства имен Managed DirectX:
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
  Любые действия в Direct3D выполняются спомощью класса устройства. Устройство является первостепенным, относительно всех других графических обьектов в сценарии.
  Рассмотрим конструктор устройства:
public Device (System.Int32 adapter, Microsoft.DirectX.Direct3D.DeviceType
devicetype, System.Windows.Forms.Control renderwindow,
Microsoft.DirectX.Direct3D.CreateFlags behaviorFlags,
Microsoft.DirectX.Direct3D.PresentParameters presentationParameters)
adapter относится к физическому устройству, которое мы классифицируем. (нулевое значение классифицирует адаптер по-умолчанию). Опция DeviceType.Reference, позволяет использовать дополнительное или эмулированное устройство растеризации (rasterizer). Параметр renderWindow (окно рендеринга) связывает окно с созданным устройством. behaviorFlags (флажки режимов) используется для управления режимами устройства после его создания. Последний параметр presentationParameters управляет представлением данных на экране.
  Зная теперь что нужно для создания адаптера, приступаем к написанию функции, которая будет инициализировать наше графическое устройство:
private Device device = null;

public void InitializeGraphics()
{
  try
  {
  this.SetStyle(ControlStyles.Opaque | ControlStyles.AllPaintingInWmPaint, true);
  this.UpdateStyles();
  // Устанавливаем параметры презентации
  PresentParameters presentParams = new PresentParameters();
  presentParams.Windowed = true;
  presentParams.SwapEffect = SwapEffect.Discard;
  // Создаем устройство
  device = new Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,presentParams);
  }
  catch (Exception ex)
  {
     MessageBox.Show(ex.Message);
  }
}
  Эту функцию следует вставить в метод Main() файла Program.cs:
        [STAThread]
        static void Main()
        {
            using (directXform dirX = new directXform())
            {
                dirX.Show();
                dirX.InitializeGraphics();
                Application.Run(dirX);
            }
        }
  Это позволит инициализировать графическое устройство при создании формы. Следует сказать, что все действия по перерисовке окна в WinForms производятся в методе OnPaint формы. Потому весь следующий код нужно поместить именно туда:
try
{
  device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);

  CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];
  verts[0].Position = (new Vector4(this.Width/2.0f,50.0f,0.5f,1.0f));
  verts[0].Color = System.Drawing.Color.Red.ToArgb();
  verts[1].Position = (new Vector4(this.Width-(this.Width/5.0f),this.Height-(this.Height/5.0f),0.5f,1.0f));
  verts[1].Color = System.Drawing.Color.Yellow.ToArgb();
  verts[2].Position = (new Vector4(this.Width/5.0f,this.Height-(this.Height/5.0f),0.5f,1.0f));
  verts[2].Color = System.Drawing.Color.Green.ToArgb();

  device.BeginScene();
  device.VertexFormat = CustomVertex.TransformedColored.Format;
  device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, verts);
  device.EndScene();
  device.Present();
  this.Invalidate();
}
catch (Exception ex)
{
  MessageBox.Show(ex.Message);
}
  Рассмотрим этот код более подробно, чтобы стало понятнее.
device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0); - очищает окно черным цветом. Первый параметр - определяет что мы хотим очистить, второй параметр - цвет, которым нужно заполнить окно.
  Так как треугольник является самой простой фигурой, то рассмотрим именно его создание. В Managed DirectX есть конструкции для работы с треугольниками.
  CustomVertex.TransformedColored - говорит о том что наш треугольник не требует никаких преобразований цветов. Эта структура указывает также цветовые параметры каждой из вершин.
  Каждый элемент массива verts является вершиной нашего треугольника. При создании мы указывали координаты точки, а потом присваивали цвет.
  Когда мы определили все вершини треугольника, можно начинать вызывать метод BeginScene.
  Далее идет метод DrawUserPrimitives, в качестве параметров которому передается тип отрисовываемого примитива, количество треугольников, и массив вершин.
  EndScene сообщает о том что мы закончили рисование.
  Present(); - обновляет наше окно.   Чтобы не возникало мерцаня при изменениях размеров окна, вызываем метод Invalidate().   Вот и все, наш треугольник отрисован. Если возникли какие-то проблемы с компиляцией, пример работы C# (Csharp) с Managed DirectX 9 всегда можно скачать отсюда.

Информация о статье "Работа с Managed DirectX 9 в C# (Csharp)"

Автор DeVoid | Сайт http://devoid.com.ua/ | Добавлена 1 Октября 2007 | Просмотрели 12848 раз

  • Digg it!
  • Delicious
  • +МоёМесто.ru
  • Добавить страницу к Мистеру Вонгу
  • Добавить страницу к Мистеру Вонгу

Комментарии КОММЕНТАРИИ

Комментариев еще нет.

Зарегистрируйтесь или выполните Вход для того чтобы оставлять комментарии