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




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


}

Тела вращения тЩ^ 109

*pfd = 0;

m_hr = m_pIMeshBld-»AddFaces(iVertices, Vertices, 2, nvect,

ULONG*)FaceData, NULL) ;

ASSERT(SUCCEEDED(m_hr)) ;

}

if (bClosed2) { pfd = FaceData;

*pfd++ = iRSteps;

iFirst = iRSteps * iZSteps;

for (int iR = 0; iR « iRSteps; iR++) (

*pfd++ = iRSteps - 1 - iR + iFirst;

*pfd++ = 0;

}

*pfd = 0;

m hr = m pIMeshBld-»AddFaces (iVertices, Vertices, 2, nvect,

(ULONG*)FaceData, NULL) ;

ASSERT(SUCCEEDED(m_hr)) ;

}

delete [] Vertices;

delete [] FaceData;

m strMame = "Solid of revolution";

return b;

}

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

Возможно, вы обратили внимание на то, что фигуре присваивается имя (в данном случае — Solid of Revolution, хранящееся в переменной m_strName). Когда мы будем заниматься выбором объектов в макете, имя сообщит пользователю, какая фигура выбрана им в настоящий момент.

Мы очень кратко пробежались по большому фрагменту программы, и у вас наверняка осталось много вопросов по поводу его работы и назначению отдельных функций. Если вы хотите понять, как устроена функция CreateRSolid, возьмите лист бумаги в клетку, сверните его в трубку и затем представьте себе, что вам потребовалось описать каждое продольное ребро и каждую грань этой решетки. Именно это и происходит в приведенном выше фрагменте, а эксперимент с трубкой описывает мой подход к его написанию. Во фрагменте присутствуют несколько вызовов функции интерфейсов DirecQD, назначение которых можно узнать в документации по DirectX 2 SDK. Заодно найдите в SDK макрос D3DVAL и посмотрите, что он делает.

/b> ЩЦУ Глава 4. Создание фигур

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




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