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


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


. Пример наложения текстуры с цилиндрическим покрытием


/b> ¦Д1^'' Глава 8. Цвет и текстуры

Приведенная ниже функция не очень сильно отличается от функции для наложения текстуры на одну грань, за исключением того, что дерево состоит не из одного объекта, а из двух, и вместо плоского покрытия используется цилиндрическое.

void CMainFrame::OnEditTree()

(

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

pTexl-»Load(IDB_LEAVES) ;

m_pScene-»m_ImgList .Append (pTexl) ;

C3dTexture* pTex2 = new C3dTexture;

pTex2-»Load(IDB_BARK) ;

m__pScene-»m_ImgList. Append (pTex2) ;

// Создать цилиндрическое покрытие C3dWrap wrap;

wrap.Create(D3DRMWRAP_CYLINDER,

NULL,

0, 0, 0, // Базовая точка

О, 0, 1, // Направление

О, 1, 0, // Верх

О, 0, // Базовая точка текстуры

1, 1); // Масштаб текстуры

// Создать крону и ствол double h = (rand() % 100) / 50.0 + 1.0;

double x = ((rand() % 100) - 50) / 10.0;

double z = ((randf) % 100) - 50) / 10.0;

double у = -2;

C3dShape* pTree = new C3dShape;

pTree-»CreateCone (x, y+h/4, z, h/4, TRUE,

x, y+h, z, 0, FALSE);

m_pScene-»m_ShapeList. Append (pTree) ;

C3dShape* pTrunk = new C3dShape;

pTrunk-»CreateRod(x, y, z,

x, y+h/4, z,

h/20);

m_pScene-»m_ShapeList. Append (pTrunk) ;

pTree-»AddChild(pTrunk) ;

// Наложить текстуры pTree-»SetTexture (pTexl) ;

wrap.Apply(pTree) ;

pTrunk-»SetTexture (pTex2) ;

wrap.Apply(pTrunk) ;

Параметры покрытия '''^

203

pTree-»SetName ("Tree") ;

m_pScene-»AddChild(pTree)

MakeCurrent(pTree) ;

Обратите внимание — для кроны и ствола используется всего один объект C3dWrap. Ориентация и масштаб в обоих случаях совпадают, и нам не пришлось создавать разные объекты для покрытии. В качестве упражнения запустите приложение Color и вставьте в макет дерево. Затем разверните его так, чтобы видеть основание конуса. Можете ли вы объяснить, почему текстура выглядит так странно? Как справиться с этой проблемой?

Сферическое покрытие

Не стоит долго гадать, для чего нам нужно сферическое покрытие — разумеется, мы займемся операцией «Генезис»*. Прежде чем углубляться в волнующие подробности, давайте сразу взглянем на конечный результат. На Рисунок 8-11 показано наложение текстуры на сферу с использованием сферического покрытия (на цветной вкладке имеется более качественный вариант рисунка). Вы можете увидеть его па экране, запустив приложение Color и выполнив команду Edit ¦ Insert A World.




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