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

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


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

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

М. Фленов. Программирование на C++ глазами хакера.
М. Фленов. Программирование на C++ глазами хакера
Заказать на Озоне

Подробнее


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

Direct3D для Visual C++
Урок 10. Натягивание текстуры на треугольник

Разумеется, раскрашивать треугольники вручную - дело неблагодарное. Обычно это делается не так. Обычно текстуру рисует профессиональный художник, и потом эта текстура натягивается на некоторую модель.

Сейчас мы и посмотрим, как это делается. Посмотрим, разумеется, в самом упрощенном варианте - а именно, натянем текстуру на один треугольник.

В качестве основы мы возьмем урок урок 8.

Вот необходимые действия, которые мы должны произвести для листинга этого урока.

Во-первых, необходимо поменять формат вершин. Вот такой он у нас был:

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

А вот такой должен стать:

struct CUSTOMVERTEX
{
    FLOAT x, y, z; // Координаты вершины.
    FLOAT x1, y1, z1; // Нормаль.
    FLOAT tu, tv; // Координаты текстуры.
};

Как вы видите, мы тут добавили еще две вещи - это координаты нормали (нормаль - это вектор, перпендикулярный к нашему треугольнику) и координаты текстуры. Остановимся на последних более подробно.

Наша текстура представляет из себя некоторый прямоугольник (что естественно). Каждая точка этого прямоугольника имеет некоторые координаты. А теперь внимание! Эти координаты меняются от 0 до 1! Да-да, именно так - они изменяются не в пикселах, а именно от нуля до одного. И вот как раз при задании данных для любой нашей вершине мы и задаем эти самые текстурные кординаты (т. е. какая точка текстуры отобразиться на нашу вершину). Естественно, что они должны быть от 0 до 1.

Во-вторых, раз мы поменяли формат вершин, то надо поменять и код для инициализации наших верших. Это мы делаем в функции InitVB:

HRESULT InitVB()
{
    CUSTOMVERTEX vertices[] =
    {
        { -1.0f,-1.0f, 0, 0, -1, 0.0f, 0, 0},
        {  1.0f,-1.0f, 0, 0, -1, 0.0f, 1, 0},
        {  0.0f, 1.0f, 0, 0, -1, 0.0f, 1, 1},
    };
    ...

Как вы видите, мы тут используем для координат текстуры числа (0, 0) - левый верхний угол текстуры, (1, 0) - правый верхний угол текстуры и (1, 1) - нижний правый угол текстуры.

Далее надо ввести изменения в описание используемого формата вершин. Это мы делаем в двух местах: в методе InitVB:

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

и в методе Render

VOID Render()
{
    ...
        // Отрисовка треугольника.
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
        g_pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_NORMAL);
        ...

Как вы видите, мы тут добавляем флажки D3DFVF_TEX1 и D3DFVF_NORMAL (и убираем 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
Отписаться

В избранное