[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Графика / Direct x /

Создание и отрисовка одного треугольника

После того, как мы создали с вами простое приложение и инициализировали D3D8, мы можем начать рисовать то, что нам необходимо. В данном уроке мы научимся создавать и рисовать одиночный треугольник (точнее два треугольника :). Я надеюсь, что вы уже знакомы с основами трехмерной геометрии, поэтому не буду здесь приводит выкладки по данной теме. Приступим сразу к реализации данных принципов с использованием D3D8.

Начнем с реализации и отрисовки двухмерных треугольников.

Мы будем использовать концепцию буферов вершин (Vertex buffers) - они используются для хранения и отображения вершин. Вершины могут быть объявлены многими различными способами указанием пользовательской структуры для одной вершины и соответствующего пользовательского гибкого формата вершины (flexible vertex format - FVF). Для формата вершины мы будем использовать нижеследующее объявление :

оно показывает, что у нашей вершины будут такие параметры, как положение ( X , Y , Z ), для уже трансформированной вершины (у нас двухмерный случай, не забыли?) параметр RHW , и цвета ( color ).

Далее нам необходимо объявить FVF :

мы показываем, что наша вершина содержит компоненты положения и трансформации ( D3DFVF_XYZRHW ) и компоненту цвета( D3DFVF_DIFFUSE ).

Далее, после того как у нас объявлен формат вершины, мы можем инициализировать вершины в буфере вершин. Для этого нам понадобится указатель на интерфейс буфера вершин IDirect3DVertexBuffer8 :

Теперь все первоначальные настройки у нас готовы и мы можем приступать к самой интересной части - инициализация вершин и вывод треугольников на экран.

Начнем, соответственно, с инициализации вершин в буфере вершин :

-- Сперва мы инициализируем наши вершины, всего шеть штук, задаем им необходимые параметры положения и цвета.
-- Следующим шагом мы создаем буфер вершин - первым параметром идет размер буфера ( 6*sizeof(CUSTOMVERTEX) ), потом флаг импользования контроля (нам он пока не нужен, поэтому приравнивем его 0 ), далее FVF для описания вершины ( D3DFVF_CUSTOMVERTEX ), затем параметр отвечающий за использование памяти (нам он тоже пока не нужен, ставим по умолчанию - D3DPOOL_DEFAULT ), и последним параметром идет указатель на интерфейс буфера вершин с которым мы будем работать ( &p_VertexBuffer ).
-- после того как мы инициализировали буфер вершин, нам необходимо поместить информацию о наших, ранее указанных, вершинах в этот буфер. За это отвечают следующие далее строки :

-- Блокируем буфер вершин для доступа,
-- Копируем информацию о наших вершинах в буфер,
-- Разблокируем буфер.

Теперь у нас есть готовый к дальнейшей работе буфер вершин. Теперь нам необходимо отобразит на экране. Делаем это следующим образом, в функцию отрисовки экрана RenderScreen() , между строками начала и конца сцены, вставляем следующие строки, которые будут рисовать наши треугольники :

-- Первой строкой мы даем знать D3D о том, какой тип вершин мы будем сейчас использовать.
-- Затем задаем поток, с которым мы будем работать - первый параметр это номер потока, второй параметр связывает данный номер потока с источником данных (в нашем случае - p_VertexBuffer ), и третий параметр это размер необходимых нам данных.
-- Последней, третьей, строкой мы рисуем наши примитивы. В данном методе присутствуют следующие параметры - первый это тип отображаемого примитива ( D3DPT_TRIANGLELIST ), второй - индекс первой вершины, с которой мы начнем рисовать ( 0 ), и третий - количество заданных примитивов (в нашем случае это 2 треугольника).

Теперь запустив приложение вы должны увидеть нечто следующее :

Вот и все...

Ах да, чуть не забыл, после работы с интерфейсом буфера вершин, его также необходимо удалить в функции DestroyDirect3D8() :


	_RELEASE_ (p_VertexBuffer);

Вот теперь все...




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Графика / Direct x /

DirectX
17-05-2010   

Это - библиотека диспетчера Microsoft DirectX, чтобы оптимизировать графы и звуковые представления для Windows... подробнее

Кол. просмотров: общее - 3535 сегодня - 1

Особенности программирования DirectX графики
07-02-2009   

Особенности программирования DirectX графики для видео карт nVidia (по материалам nVidia)... подробнее

Кол. просмотров: общее - 4005 сегодня - 3

DirectX 8.0 FAQ
26-01-2009   
Кол. просмотров: общее - 4603 сегодня - 1

Пишем DirectX-движок
25-01-2009   

Темой этого урока я решил сделать написание т. н. движка. Полагая, что всегда существует определённый контингент людей, только начавших изучать мультимедийные и игровые технологии, и плавающие в загадочных понятиях, объясню, что такое движок и на каком бензине он работает... подробнее

Кол. просмотров: общее - 3994 сегодня - 2

Что может наша видеокарта, что можем сделать мы и как это узнать?
15-01-2009   

По прошествии некоторого времени после празднования Нового Года и всего, что с ним связано, предлагаю вашему вниманию новый урок. Посвящен он будет извлечению информации о возможностях вашей видео карты... подробнее

Кол. просмотров: общее - 3891 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects