Часть полного текста документа:Основы программирования OpenGL в Borland С++Builder и Delphi. Простейшие объекты Луковкин Сергей Рассматривая какой-либо трёхмерный объект, мы всегда определяем его положение и размеры относительно некоторой привычной, и удобной в настоящий момент системы координат, связанной с реальным миром. Такая исходная система координат в компьютерной графике является правосторонней и называется мировой системой координат.... Для того, чтобы можно было изобразить объект на экране, его необходимо предварительно перевести (или преобразовать) в другую систему координат, которая связана с точкой наблюдения и носит название видовой системы координат. Эта система координат является левосторонней. И, наконец, любое трёхмерное изображение мы всегда рисуем на двумерном экране, который имеет свою экранную систему координат. (Этот абзац я списал у Ю.Тихомирова). Правосторонняя система координат (мировая) Левосторонняя система координат (видовая) По умолчанию, плоскость xOy параллельна экрану, а ось Z направлена в мировых координатах к нам, в видовых - от нас. Переход к новым координатам В OpenGL все объекты рисуются в начале координат, т.е. в точке (0,0,0). Для того, чтобы изобразить объект в точке (x1,y1,z1), надо переместить начало координат в эту точку, т.е. перейти к новым координатам. Для этого в OpenGL определены две процедуры: glTranslate[f d](Dx, Dy, Dz) - сдвигает начало координат на (Dx, Dy, Dz) glRotate[f d](j, x,y,z) - поворачивает систему координат на угол j (в градусах) против часовой стрелки вокруг вектора (x,y,z) ПРИМЕЧАНИЕ: [f d] - означает, что в конце может быть либо буква "f", либо "d". Теперь стоит сказать ещё о двух процедурах: glPushMatrix glPopMatrix Первая предназначена, для сохранения, а вторая - для восстановления текущих координат. Очень удобно с помощью glPushMatrix сохранить текущие координаты, потом сдвигаться и вертеться как угодно, а после, вызовом glPopMatrix, вернуться к исходным координатам. Параметров у этих процедур нет. Часть 2. Простейшие фигуры Простейшие объёмные фигуры В примере из прошлой статьи мы создали сферу. Для этого мы использовали механизм из glu32.dll. Алгоритм был такой: 1. Создаём объект типа GLUquadricObj 2. Инициализируем его функцией gluNewQuadric 3. Устанавливаем стиль фигуры функцией gluQuadricDrawStyle(quadObj, GLU_FILL). Стиль может быть GLU_FILL, GLU_LINE, GLU_SILHOUETTE или GLU_POINT. Что каждый из них значит, проверьте сами. 4. Делаем из quadObj (объекта типа GLUquadricObj) сферу, цилиндр, конус, диск или часть диска. Для этого определены следующие функции: · gluSphere (quadObj, radius, slices, loops). Три последних параметра - это радиус и количество разбиений поперёк и вдоль оси Z соответственно. · gluCylinder (quadObj, baseRadius, topRadius, height, slices, loops). После quadObj идут следующие параметры: радиус нижнего основания, радиус верхнего основания, высота и количество разбиений поперёк и вдоль оси Z соответственно. Очевидно, что эта функция задаёт как цилиндр, так и конус. · gluDisk (quadObj, innerRadius, outerRadius, slices, loops). Здесь после quadObj указываются внутренний и внешний радиусы диска. · gluPartialDisk (quadObj, innerRadius, outerRadius, slices, loops, startAngle, sweepAngle). Здесь добавляются два параметра: угол (в градусах), с которого начнётся рисование диска, и угол, которым рисование закончится. 5. ............ |