Chapter 4
Полезные и бесполезные мелочи
4.1 Построение поверхностей
Существует набор функций для построения сфер, цилиндров и дисков.
Эти функции представляют очень мощный контроль за построением трехмерных
объектов. Непосредственно рисовать вы будете, используя следующие функции:
gluSphere, gluCylinder, gluDisk и gluPartialDisk. В
начале книги вы научились строить трехмерные объекты с помощью функций из
библиотеки Auxilary Library. Функции aux[Solid/Wire]Sphere, aux[Solid/Wire]Cylinder
и aux[Solid/Wire]Cone просто вызывают gluSphere и gluCylinder. Как я уже
ранее говорил, в aux[Solid/Wire]Cylinder и aux[Solid/Wire]Cone фирмы Microsoft
имеются баги. Здесь будет подробно рассмотрено построение сфер и цилиндров,
так что потребность в aux[Solid/Wire]Cylinder и aux[Solid/Wire]Cone отпадет.
Первым параметром для gluSphere, gluCylinder, gluDisk является указатель
на объект типа GLUquadricObj. Далее следуют
параметры непосредственно создаваемой фигуры. Для сферы - это радиус;
для цилиндра - радиус нижнего основания, радиус верхнего основания и высота;
для диска - внутренний радиус, внешний радиус и для частичного диска -
внутренний радиус, внешний радиус, угол, с которого начинать рисовать,
длина дуги в градусах, которую рисовать. Последние два параметра у всех
этих функций одинаковы. Это число разбиений вокруг оси Z и число разбиений
вдоль оси Z. Как я уже говорил, все сложные объекты состоят из простых:
точек, линий и многоугольников. Вы понимаете, что нарисовать/создать
идеально гладкую сферу или цилиндр невозможно. Поэтому строится приближение
из плоскостей. Для этого и нужно указать количество разбиений. Чем больше
разбиение, тем лучше будет выглядеть ваша сфера. Однако, задавать здесь
число с шестью нулями не стоит. Это лишено всякого смысла. Оптимальным,
на мой взгляд, является число от 10 до 20. Чем больше объект, тем больше нужно
разбиений. Число разбиений вдоль и поперек я выставляю одинаковыми. Сначала
вы должны создать объект типа GLUquadricObj с помощью функции gluNewQuadric.
Теперь устанавливаете свойства с помощью функции
gluQuadricDrawStyle. Доступны стили:
GLU_FILL - рисуется сплошной объект, GLU_LINE - проволочный объект, GLU_POINT - рисуются только точки. Рисуете то, что хотите.
И не забудьте удалить созданный объект, воспользовавшись gluDeleteQuadric.
Настало время поэкспериментировать. Создайте очередное консольное приложение
и отредактируйте функцию display следующим образом.
void CALLBACK display(void)
{
GLUquadricObj *quadObj;
quadObj = gluNewQuadric(); // создаем новый объект
// для создания сфер и цилиндров
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glColor3d(1,0,0);
gluQuadricDrawStyle(quadObj, GLU_FILL); // устанавливаем
// стиль: сплошной
gluSphere(quadObj, 0.5, 10, 10); // рисуем сферу
// радиусом 0.5
glTranslated(-2,0,0); // сдвигаемся влево
glRotated(45, 1,0,0); // поворачиваем
glColor3d(0,1,0);
gluQuadricDrawStyle(quadObj, GLU_LINE); // устанавливаем
// стиль: проволочный
gluCylinder(quadObj, 0.5, 0.75, 1, 15, 15);
glPopMatrix();
gluDeleteQuadric(quadObj);
auxSwapBuffers();
}
|