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


DirectSD - часть 14


// Добавляем в буфер команды рисования фигур ex.AddTriangle (0, 3, 1) ;

ex.AddTriangle(1, 3, 2);

/b> irf? Глава 13. Direct3D

ex.AddTriangle(2, 3, 0);

ex.AddTriangle(0, 1, 2);

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

На этом подготовительная часть завершается. Далее мы входим в цикл, который многократно воспроизводит макет во вторичном буфере, вычисляет скорость вывода и переключает буфера, чтобы результат появился на экране:

DWORD dwStart = timeGetTime();

int nFrames = 360;

for (int iFrame = 0; iFrame « nFrames; iFrame++) (

DWORD dwNow = timeGetTime();

double fps;

if (dwNow == dwStart) {

fps = 0;

} else {

fps = iFrame * 1000.0 /

(double)(dwNow - dwStart) ;

)

// Очистить ракурс (присвоить текущий фоновый // материал) D3DRECT г;

r.xl = 0;

r.yl = 0; // Левый верхний угол r.x2 = m_pTI-»iWidth;

r.y2 = m_pTI-»iHeight; // Правый нижний угол hr = m_pIViewport-»Clear(l, &r, D3DCLEAR_TARGET ¦ D3DCLEAR_ZBUFFER) ;

ASSERT(SUCCEEDED(hr));

#if 1 // Заменить на 0, чтобы убрать с экрана // скорость вывода.

// Отобразить строку со скоростью вывода

// во вторичном буфере.

char buf[64] ;

sprintf(buf, "Frame %2d (%3.1f fps)", iFrame, fps) ;

CDC* pdc = pBB-»GetDC() ;

ASSERT(pdc) ;

pdc-»DrawText (buf, -1, SrcBack, DT_CENTER ¦ DT_BOTTOM I DT_SINGLELINE) ;

pBB-»ReleaseDC(pdc) ;

#endif

// Выполнить буфер BOOL b = ex.Execute();

ГЬиложение DSDEval '!№ 321

ASSERT(b) ;

// Переключить буфера

if (m_pTI-»bFullScreen) {

pFB-»Flip () ;

} else {

pFB-»Blt (SrcFront, pBB, SrcBack);

}

\

Если не считать работы с буфером выполнения, данный фрагмент совпадает с примером DDEval.

Расчет преобразований и освещения

Если вы будете самостоятельно выполнять все вычисления для преобразований и освещения, программа значительно упрощается. Разумеется, главное — общий объем кода, который вам придется написать, так что вы вовсе не обязательно окажетесь в выигрыше!




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



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