ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


Цвет и текстуры - часть 10


Плоское покрытие

Плоское покрытие является самым простым способом наложения текстуры на поверхность. Вероятно, его даже не следовало бы называть «покрытием», поскольку на самом деле оно ничего не покрывает, а скорее напоминает раскрашенную декорацию, повешенную перед поверхностью. Начнем с самого тривиального примера — наложения текстуры на объект с одной гранью, с применением плоского покрытия. Приложение Color позволяет вывести на экран грань с текстурой, изображенную на Рисунок 8-4 (команда Edit ¦ Insert Тех Map Face).

Рисунок. 8-4. Текстура, наложенная на повернутую грань


Грань на Рисунок 8-4 слегка повернута вокруг оси у, и текстура напоминает фотографию, на которую смотрят сбоку. Для получения такого результата к текстуре была дополнительно применена коррекция перспективы. По умолчанию механизм

/h2>

Глава 8. Цвет и текстуры

визуализации не корректирует перспективу, однако я счел эту возможность исключительно полезной, и потому библиотека 3dPlus настраивает механизм визуализации на выполнение коррекции перспективы. Впрочем, я опережаю события — давайте сначала рассмотрим функцию, построившую объект на Рисунок 8-4, и поймем, для чего же нужна коррекция перспективы. Наш объект с одной гранью создан следующим образом:

void CMainFrame::OnEditInstxface ()

{

// Создать фигуру с одной гранью //и наложить на нее текстуру C3dShape* pShape = new C3dShape() ;

D3DVECTOR vlist[] = (

(-1.0, -1.0, 0.0},

{ 1.0, -1.0, 0.0},

{ 1.0, 1.0, 0.0},

(-1.0, 1.0, 0.0} };

int iVectors = sizeof(vlist) / sizeof(D3DVECTOR);

int iFaces[] = {4, 0, 3, 2, 1, // Передняя грань 4, 0, 1, 2, 3, // Задняя грань 0);

pShape-»Create (vlist, iVectors, iFaces);

// Раскрасить заднюю грань, чтобы видеть ее pShape-»SetFaceColor(l, О, О, 1); // Синий цвет

// Загрузить текстуру C3dTexture* pTex = new C3dTexture;

if ( !pTex-»Load(IDB_Gl) ) ( return;

} m_pScene-»m_ImgList. Append (pTex) ;

// Присоединить текстуру к передней грани p3hape-»SetFaceTexture(0, pTex) ;

// Создать покрытие.

// Грань имеет размеры 2х2 единицы, поэтому




Начало  Назад  Вперед



Книжный магазин