devoid.com.ua - Портал программистов. Все для программиста.
         Новости  Статьи  FAQ  Файлы  Ответы  Блог  Форум     
Статьи
C# (C sharp)
 Начинающим
 Win Forms
 Среда .NET
 C# - научиться или умереть
C / Visual C++
 Основы языка
C++Builder
 Общие вопросы
 Базы данных
 Сеть
Pascal/Delphi
 Основы
 Базы Данных
 Сеть
PHP
 Основы языка
ASP.NET
 Введение
 ADO.NET
Базы данных
 MS SQL Server
 MySQL
 Firebird/InterBase
Описания функций
 WinAPI
 C++/C (Си)
Студентам
 Лабораторные работы по C++


Пластиковые окна дешево пластиковые окна установка, установить пластиковые окна, калева пвх окна.
Работа с 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/
  Добавлена:01 октября 2007
  Просмотров:4703



Не нашли ответ на свой вопрос? Задайте вопрос своим коллегам и они Вам ответят!

Задать вопрос

Популярные
   - Автозапуск программы в C#
   - Работа с RSS в C# (Csharp). Создание своего RSSReader
   - Транслитер на C# (Csharp)


Блог
Купил ноутбук ASUS F3Sg-T575SCCFAW
Начал использовать Zend Framework. Доволен.
Купил цифровой фотоаппарат - Canon PowerShot A580
Получил начальный аттестат Web Money
C# - запуск только одной копии программы

Форум
Ряд Фибоначчи
Работа с компонентами ScrollBar и TextBox
COM порт
!!!В САНКТ-ПЕТЕРБУРГ В КРУПНУЮ КОМПАНИЮ НУЖНЫ СПЕЦИАЛИСТЫ ДЛ
решение задач аналитической геометрии на языке С


Пластиковые окна для дачи, пластиковые окна цена, окна стоимость, окна петербург.|Новогодние поздравления любимым!

© Макагон Сергей (DeVoid) , 2007-2008.