Chapter 3
Рисуем простые объекты

3.1  Общие положения

     Точки, линии, треугольники,четырехугольники, многоугольники - простые объекты, из которых состоят любые сложные фигуры. В предыдущей главе мы рисовали сферу, конус и тор. OpenGL непосредственно не поддерживает функций для создания таких сложных объектов, т.е. таких функций нет в opengl32.dll. Эти функции есть в библиотеке утилит glu32.dll, и устроены они следующим образом. Для того чтобы нарисовать сферу, функция auxSolidSphere использует функции из библиотеки glu32.dll, а те в свою очередь, используют базовую библиотеку opengl32.dll и из линий или многоугольников строят сферу. Примитивы создаются следующим образом:

glBegin(GLenum mode);  // указываем, что будем рисовать
  glVertex[2 3 4][s i f d](…); // первая вершина
  …                            // тут остальные вершины
  glVertex[2 3 4][s i f d](…); // последняя вершина
 glEnd();               // закончили рисовать примитив

     Сначала вы говорите, что будете рисовать - glBegin с соответсвующим параметром. Возможные значения mode перечислены ниже в таблице. Далее вы указываете вершины, определяющие объекты указанного типа. Обычно, вы будете задавать вершину одним из четырех способов.

glVertex2d(x,y);    // две переменных типа double
glVertex3d(x,y,z);  // три переменных типа double
glVertex2dv(array); // массив из двух переменных типа double
glVertex3d(array);  // массив из трех переменных типа double
И, наконец, вы вызваете glEnd, чтобы указать, что вы закончили рисовать объекты типа, указанного в glBegin. Далее мы подробно разберем создание всех примитивов.

Значение modeОписание
GL_POINTSКаждый вызов glVertex задает отдельную точку.
GL_LINESКаждая пара вершин задает отрезок.
GL_LINE_STRIPРисуется ломаная.
GL_LINE_LOOPРисуется ломаная, причем ее последняя точка соединяется с первой.
GL_TRIANGLESКаждые три вызова glVertex задают треугольник.
GL_TRIANGLE_STRIPРисуются треугольники с общей стороной.
GL_TRIANGLE_FANТоже самое, но по другому правилу соединяются вершины, вряд ли понадобится.
GL_QUADSКаждые четыре вызова glVertex задают четырехугольник.
GL_QUAD_STRIPЧетырехугольники с общей стороной.
GL_POLYGONМногоугольник.