При каждой вырезке отсекается полупространство, массив задает вектор, определяющий остающуюся часть. Вектор не должен быть обязательно перпендикулярен осям, как в нашем примере.
Для получения четверти сферы проделываем две вырезки: сначала обрезаем нижнее полупространство, удаляя все вершины с отрицательным значением координаты Y, затем отсекаем левее полупространство, т. е. удаляются вершины с отрицательным значением координаты X
const
eqn . Array [0..3J of GLdouble = (0.0, 1.0, 0.0, 0.0);
eqn2 : Array [0.-3] of GLdouble - (1.0, 0.0, 0.0, 0.0); /,' удаление нижней половины, для у < О
glClipPlane (GL_CLIP_PLANE0, 6eqn);// идентифицируем плоскость отсечения
дЛЕпаЫе (GL_CLIP__PLANEO); // включаем первую плоскость отсечения
// удаление левой половины, для х < О glClipPlane (GL_CLIP_PLANE1, 6eqn2);
glEnable (GL_CLIP_PLANE1); // включаем вторую плоскость отсечения
Если теперь вернуться к библиотеке glut, то можно заметить, что сфера и конус в ней строятся на базе объектов библиотеки giu. Например, процедура для построения каркаса сферы выглядит так:
procedure glutWireSphere (
Radius : GLdouble;
Slices : GLint;
Stacks : GLint), begin ( glutWireSphere J
if quadObj nil then
quadObj := gluNewQuadric;
gluOuadricDrawStyle (quadObj, GLU_LINE);
gluOuadricNormals (quadObj, GLU_SMOOTH);
gluSphere(quadObj, Radius, Slices, Stacks); end; ( glutWireSphere J
Здесь можно подсмотреть несложный прием для определения того, надо ли создавать quadric-объект.
Опубликовал vovan666
October 30 2013 14:25:11 ·
0 Комментариев ·
4267 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.