В стандартном OpenGL нет таких очень важных примитивов как сфера или конус. Конечно, ты в любой момент можешь нарисовать сферу из множества точек, но это будет громоздко и тяжело. Есть выход проще -для OpenGL есть надстройка, которая называется glu, и находиться она в файле glu32.dll. Вот именно с ней мы сегодня и познакомимся.
Рис 1. Результат
На рисунке 1 ты можешь увидеть результат сегодняшней работы. А самое интересное, что код программы будет даже меньше, чем в предыдущей статье. Это не шутка, я на полном серьезен. Я даже приведу полный листинг проги прямо здесь, а потом мы разберём её по кусочкам.
Когда я сказал, что приведу полный листинг, я тебя немного обманул. Надеюсь, ты простишь меня засранца. Я не стал приводить текст трёх функций FormResize, FormDestroy и PixelFormat, потому что они абсолютно такие же, как и во всех предыдущих уроках. В самом начале, я объявляю переменную quadObj типа PGLUquadricObj. Если ты не используешь заголовочные файлы GL и GLU (которые можно скачать в разделе полезности), а меняешь их на один файл opengl (из стандартной поставки Delphi), то у тебя эта переменная будет типа GLUquadricObj (без буквы "Р" на конце).
По событию OnCreate я инициализирую эту переменную (одна из последних строцек моего кода) quadObj:=gluNewQuadric();.
В процедуре FormPaint я задаю параметры рисования объекта gluQuadricDrawStyle. В качестве первого параметра выступает созданная мною переменная, с которой будет ассоциироваться "тип рисования". Второй параметр - непосредственно тип, он может иметь параметры
GLU_FILL - объект полностью закрашивается (рис 1).
GLU_LINE - объект рисуется линиями (рис 2).
GLU_SILHOUETTE - рисуется только силуэт объекта (рис 3.)
GLU_POINT - объект рисуется точками (рис 4).
Рис 2.
Рис 4.
Рис 3.
После всего этого можно смело рисовать объекты библиотеки glu. В этом примере я использовал три из них, поэтому мы только их и рассмотрим:
gluSphere - первый параметр это GLU объект (в нашем случае quadObj), второе - радиус, третий - количество частей вокруг оси Z, четвёртый - количество частей вдоль оси Z.
gluCylinder - первый параметр такой же, второе - маленький радиус, третий - большой радиус, четвёртый - количество частей вокруг оси Z, пятый - количество частей вдоль оси Z.
gluDisk - первый параметр всё тот же, второе - внутренний радиус, третий - внешний радиус, четвёртый - количество частей вокруг оси Z, пятый - число колец (в принципе это всё те же части).
Рис 5.
Что такое "количество частей вокруг/вдоль оси Z"? Чем больше этих частей, тем более гладким будет объект. Я не буду особо приводить примеры, а покажу только один, в котором очень сильно уменьшено количество этих частей (рис5).
Вот и всё. На сегодня новостей больше нет. Но это только на сегодня. Нас ещё ждут текстуры, материалы, освещение и что-нибудь ещё придумаю. Удачи!!!