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


         

Плоское покрытие является самым простым


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

Плоское покрытие является самым простым способом наложения текстуры на поверхность. Вероятно, его даже не следовало бы называть «покрытием», поскольку на самом деле оно ничего не покрывает, а скорее напоминает раскрашенную декорацию, повешенную перед поверхностью. Начнем с самого тривиального примера — наложения текстуры на объект с одной гранью, с применением плоского покрытия. Приложение 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 единицы, поэтому


Содержание  Назад  Вперед