Закрашивание

Начнем мы с тетраэдра, хотя можно было бы начать с любого правильного многогранника, гранями которого являются треугольники3. Правильный тетраэдр имеет четыре грани, каждая из которых - равносторонний треугольник, и определяется четырьмя вершинами. Начнем со следующего массива вершин: (0, 0, 1), (О, 2V2/3, -1/3), (-Vô/З, -л/2/3, -1/3), (V6/3, -V2/3, -1/3). Все четыре вершины лежат на сферической поверхности единичного радиуса, центр которой находится в начале координат. В упр. 6.6 вам предлагается самостоятельно разработать метод определения координат этих вершин.

Начальное приближение вычертим в режиме построения проволочного изображения. Определим в программе глобально четыре вершины, используя тип переменных point3, который мы рассматривали в главе 4:

point3 v[4]={{0.0, 0.0, 1.0}, {0.0, 0.942809, -0.333333}, {-0.816497, -0.471405, -0.333333}, {0.816497, -0.471405, -0.333333}};

Для вычерчивания треугольника воспользуемся функцией triangle(), текст которой представлен ниже:

void triangle( point3 a, point3 b, point3 с) {

glBegin(GL_LINE_LOOP);
glVertex3fv(a);
glVertex3fv(b);
glVertex3fv(c); glEnd();
}

Отдельную функцию разработаем для вычерчивания тетраэдра: void tetrahedron() {

triangle(v[0], v[l], v[2] ); triangle(v[3], v[2], v[l] ); triangle(v[0], v[3], v[l] ); triangle(v[0], v[2], v[3] );
}

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

Можно приблизить его к сфере, разделив каждую грань на правильные треугольники меньшего размера. Разбиение на треугольники гарантирует, что все грани нового объекта фигуры будут плоскими. Существуют, по меньшей мере, три способа такого разбиения, которые представлены на рис. 6.35. Можно выполнить разбиение биссектрисами каждого внутреннего угла, которые, поскольку треугольник равносторонний, пересекутся в одной точке. Можно вычислить центр масс треугольника и соединить его с каждой вершиной. Но оба эти метода нам не подходят, поскольку в результате получаются треугольники с разными длинами сторон, что не позволит сформировать на их основе правильный многогранник. Поэтому мы


⇐ Предыдущая| |Следующая ⇒