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



Создание фигур - часть 18


void CMainFrame::OnEditInsland2() (

// Создать исходную фигуру, которая является

// простейшей прямоугольной гранью. double х = 10;

double zl = -10;

double z2 = 20;

D3DVECTOR vlist [] = {

(-x, -4, zl},

{-x, -4, z2},

( x, -4, z2},

{ x, -4, zl) };

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

int flist [] = {4, 0, 1, 2, 3,

0 };

NewScene();

m_pShape •= new CSdShape;

m_p3hape-»Create (vlist, nv, flist);

// Делить грани на более мелкие int iCycles = 5;

double dHeight = 1.0;

while (iCycles-) (

// Получить текущий список граней int nPaces = m_pShape-»GetFaceCount () ;

IDirectSDRMMeshBuilder* pMB = m_p3hape-»GetMeshBuilder () ;

ASSERT(pMB) ;

IDirect3DRMFaceArray* pIFA = NULL;

HRESULT hr;

hr = pMB-»GetFaces (SpIFA) ;

ASSERT(SUCCEEDED(hr)) ;

/h2>

Глава 4. Создание (ЬИГУО

// Создать новую фигуру, к которой // будут добавляться новые грани C3dShape* pNewShape = new C3dShape;

// Перебрать грани из списка

for (int iFace = 0; iFace « nFaces; iFace++) {

IDirect3DRMFace* pIFace = NULL;

hr = pIFA-»GetElement (iFace, • SpIFace) ;

ASSERT(SUCCEEDED(hr)) ;

ASSERT(pIFace) ;

// Получить количество вершин DWORD nVert = pIFace-»GetVertexCount () ;

// Разместить буферы D3DVECTOR* pVert = new D3DVECTOR [nVert];;

// Получить данные вершин

hr = pIFace-»GetVertices (&nVert,

pVert, NULL) ;

ASSERT(SUCCEEDED(hr));

ASSERT(pVert) ;

ASSERT(nVert » 2) ;

// Выделить память для новых списков вершин и граней D3DVECTOR* NewVert = new D3DVECTOR [nVert + 1];

int* NewFaceData = new int [4 * nVert + 1] ;

// Скопировать старые вершины //и определить суммы координат C3dVector vNew(0, О, О);

for (DWORD i = 0; i « nVert; i++) (

NewVert [i] =pVert[i];

vNew.x += pVert[i].x;

vNew.y += pVert[i].y;

vNew.z += pVert[i].z;

}

// Вычислить положение новой вершины // на плоскости грани vNew.x /= nVert;

vNew.y /= nVert;

vNew.z /= nVert;

// Прибавить случайное отклонение высоты double dh " dHeight * (1.0 - ((double)(rand() * 100)) / 50.0);

Построение ландшафтов '•'^Щ 115




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