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

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


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

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

А. Ламот. Программирование трехмерных игр для Window.
А. Ламот. Программирование трехмерных игр для Window
Заказать на Озоне

Подробнее


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

Direct3D для Visual C++
Урок 15. Использование текструры для однородных координат

Напомним, что однородные кординаты для трехмерного пространства- это координаты вида (x, y, z, t), где t всегда равно 1, а x, y, z - соответствуют обычным координатам трехмерного пространства.

Мы с вами использовали однородные координаты в первых уроках (например, в уроке 4).

Сейчас мы с вами посмотрим, как можно натагивать текстуру на объект, заданный однородными координатами. За основу возьмем код урока 5.

Прежде всего мы должны изменить нашу структуру CUSTOMVERTEX, а именно добавить в нее текстурные координаты:

struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw; // Координаты вершины.
    FLOAT tu, tv; // Координаты текстуры.
};

Далее мы должны в двух местах, а именно в методах InitVB и в Render мы изменяем флаги для используемого формата на D3DFVF_XYZRHW | D3DFVF_TEX1:

HRESULT InitVB()
{
    ...
    // Создаем вершиный буфер.
    if(FAILED(g_pd3dDevice->CreateVertexBuffer(
        6*sizeof(CUSTOMVERTEX), 0,
        D3DFVF_XYZRHW | D3DFVF_TEX1,
        D3DPOOL_DEFAULT, &g_pVB, NULL )))
    {
        ...
VOID Render()
{
    ...
    if(SUCCEEDED(g_pd3dDevice->BeginScene()))
    {
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
        g_pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_TEX1);
        ...

Затем мы должны в методе InitVB задать значения для 6 вершин нашего квадрата. Координатные текстуры мы задаем самым простым способом - а именно таким образом, чтобы прямоугольник текстуры просто наложился на наш квадрат:

HRESULT InitVB()
{
    // Задаем 6 вершин квадрата.
    CUSTOMVERTEX vertices[] =
    {
        {30.0f, 30.0f, 0.0f, 1.0f, 0, 1},
        {130.0f, 30.0f, 0.0f, 1.0f, 1, 1},
        {30.0f, 130.0f, 0.0f, 1.0f, 0, 0},
        {130.0f, 130.0f, 0.0f, 1.0f, 1, 0},
        {30.0f, 130.0f, 0.0f, 1.0f, 0, 0},
        {130.0f, 30.0f, 0.0f, 1.0f, 1, 1},
    };

Теперь переходим непосредственно к использованию текстуры. Тут мы действуем как всегда - а именно сначала объявляем глобальныю переменную для текстуры:

LPDIRECT3DTEXTURE9 pTexture0;

Затем загружаем в нее текстуру из файла:

D3DXCreateTextureFromFile(g_pd3dDevice, "1.bmp", &pTexture0);

Это можно сделать, например, в начале метода InitVB или в конце (после создания устройства) метода InitD3D.

И, наконец, в методе Render мы должны установить для нашего устройства загруженную текстуру:

VOID Render()
{
        ...
        g_pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_TEX1);
        g_pd3dDevice->SetTexture(0, pTexture0);
        ...

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

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
ASP.NET
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
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 Игорь Алексеев

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.directxlessons
Отписаться
Вспомнить пароль

В избранное