Давайте посмотрим, как работает функция
Давайте посмотрим, как работает функция C3dShape::CreateRSolid. Приведенный ниже фрагмент взят из библиотеки 3dPlus:
// Создание тел вращения
BOOL CBdShape::CreateRSolid(double zl, double z2, double dz, BOOL bClosedl, BOOL bClosed2, SOLIDRFN pfnRad, void* pArg, int nFacets) (
New () ;
ASSERT(pfnRad) ;
ASSERT(dz != 0) ;
int iZSteps = (int)((z2 - zl) / dz);
if (iZSteps « 1) return FALSE;
int iRSteps = nFacets;
if (iRSteps « 8) iRSteps = 8;
double da = _twopi / iRSteps;
// Создать массив для вершин int iVertices °= (iZSteps + 1) * iRSteps;
D3DVECTOR* Vertices = new D3DVECTOR [iVertices];
D3DVECTOR* pv - Vertices;
// Создать массив для данных граней.
// Каждая грань имеет 4 вершины, за исключением торцов.
int iFaces = iZSteps * iRSteps;
int iFaceEntries = iFaces * 5 + 1;
if (bClosedl) iFaceEntries += iRSteps + 1;
if (bClosed2) iFaceEntries += iRSteps + 1;
int* FaceData = new int [iFaceEntries] ;
int* pfd = FaceData;
// Заполнить координаты вершин double z = zl;
/b> ¦¦¦¦1' Глава 4. Создание фигур
double r, a;
for (int iZ = 0; iZ «= iZSteps; iZ++) { r = pfnRadfz, pArg) ;
a = 0;
for (int iR = 0; iR « iRSteps; iR++) {
pv-»x = D3DVAL(r * sin(a));
pv-»y = D3DVAL(r * cos(a));
pv-»z = D3DVAL(z) ;
pv++;
a += da;
} z += dz;
}
// Заполнить список граней
int iFirst = iRSteps;
for (iZ = 0; iZ « iZSteps; iZ++) {
for (int iR = 0; iR « iRSteps; iR++) {
*pfd++ =4; //No. of vertices per face
*pfd++ = iFirst + iR;
*pfd++ = iFirst + ((iR + 1) % iRSteps);
*pfd++ = iFirst - iRSteps +
((iR + 1) % iRSteps) ;
*pfd++ = iFirst - iRSteps + iR;
} iFirst += iRSteps;
} *pfd =0; // Завершить список
// Создать круговую поверхность с автоматической // генерацией нормалей
BOOL b = Create(Vertices, iVertices, NULL, 0, FaceData, TRUE) ;
delete [] FaceData;
FaceData = new int [iRSteps * 2 + 2] ;
D3DVECTOR nvect [] = { {0, 0, 1}, {О, 0, -1}
};
if (bClosedl) { pfd = FaceData;
*pfd++ = iRSteps;
for (int iR = 0; iR « iRSteps; iR++) (
*pfd++ =
iR;
*pfd++ = 1;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий