Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


Информационный Канал Subscribe.Ru

Direct3D для Visual C++. Рассылки сайта progs.biz
Выпуск № 25
 
Начало > DirectX > Direct3D > VC++.NET > Урок 6

Том Миллер. DirectX 9 с управляемым кодом. Программирование игр и графики.
Том Миллер. DirectX 9 с управляемым кодом. Программирование игр и графики
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 6.

Direct3D для Visual C++
Урок 6. Изменение формата вершин

На позапрошлом уроке мы рисовали треугольник. Фактически он у нас находился в двумерном пространстве - т. е. на плоскости. На этом уроке (и на паре следующих) мы перенесем его в трехмерное пространство.

Для этого нам сначала надо изменить формат вершин. Этом мы и займемся на этом уроке.

Найдите фрагмент нашего кода со старый форматом вершин:

struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw; // Координаты вершины.
    DWORD color; // Цвет вершины.
};

и измените его на новый формат:

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // Координаты вершины.
    DWORD color; // Цвет вершины.
};

Как вы видите, мы просто убрали переменную rhw из нашей структуры.

Раз мы теперь имеем другую структуру для вершин, то мы должны поменять и метод InitVB. Например, вот таким образом:

HRESULT InitVB()
{
    // Задаем три вершины треугольника.
    CUSTOMVERTEX vertices[] =
    {
        { -1.0f,-1.0f, 0.0f, 0xffffff00, },
        {  1.0f,-1.0f, 0.0f, 0xff0000ff, },
        {  0.0f, 1.0f, 0.0f, 0xff00ff00, },
    };
    ...

Основное изменение тут в том, что мы убрали по одному числу из каждой вершины (точно также, как и из формата вершин).

Кроме того, везде надо вместо D3DFVF_XYZRHW поставить D3DFVF_XYZ (это, разумеется, именно потому, что у нас теперь никакого rhw в структуре вершин нет). Это нам надо сделать в двух местах: во-первых, в уже измененном методе InitVB:

HRESULT InitVB()
{
    ...
    // Создаем вершиный буфер.
    if(FAILED(g_pd3dDevice->CreateVertexBuffer(
        3*sizeof(CUSTOMVERTEX),
        0, D3DFVF_XYZ|D3DFVF_DIFFUSE,
        D3DPOOL_DEFAULT, &g_pVB, NULL )))
    {
        ...
    }
    ...

и во-вторых, в методе Render:

VOID Render()
{
    ...
    // Начало отрисовки сцены.
    if(SUCCEEDED(g_pd3dDevice->BeginScene()))
    {
        // Отрисовка треугольника.
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
        g_pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
        ...
    }

    ...

С изменением формата вершин все. Продолжение - на следующем уроке.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2005 сайт progs.biz
© 2002-2005 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.directxlessons
Отписаться

В избранное