Blender для начинающих/Немного об OpenGL
Содержание コンテンツ
Blender 2.77 - теория 이론
Blender 2.77 - практика 实践
Blender 2.49 - теория 이론
Старый Blender Содержит информацию о Blender 2.49. После прочтения данной части книги Вы сможете назвать основные плюсы и минусы Blender 2.49. Blender 2.77 & 3DsMax 이론
Blender & 3DsMax Сравнение Blender, 3DsMax, Sweet Home и Art Of Illusion. После прочтения этой главы Вы будете немного знать о различиях этих программ. Программирование 이론
Дополнительное 이론
Постобработка изображений
Музыкальное сопровождение
Одни из главных классов Python: bpy.ops | bpy.data | bpy.types.ID
|
Ссылки на материалы |
---|
|
Возможно, Вас заинтересует следующее: |
О Blender 2.76 | Скачать Blender 2.76 |
Введение
[править]OpenGL - библиотека, позволяющая рисовать двухмерные и трехмерные сцены. В ней присутствуют следующие типы:
- GLbyte байт
- GLshort - короткое целое
- GLint - целое
- GLfloat - дробное
- GLdouble - дробное с двойной точностью
- GLubyte - беззнаковый байт
- GLushort - беззнаковое короткое целое
- GLuint - беззнаковое целое
Основы OpenGL
[править]Представление цвета в OpenGL
[править]Цвет в OpenGL представляется в виде трех чисел: красного, зеленого и синего компонентов. Все параметры задаются в диапазоне от 0 до 1. Установить цвет можно функцией:
GLColor3f(R, G, B)
Например, красный цвет устанавливается вот так:
GLColor3f(1.0, 0.0, 0.0)
Устанавливать цвет можно абсолютно для любого примитива.
Примитивы GLaux
[править]Ниже приведен список примитивов, которые могут быть нарисованы с помощью библиотеки «GLaux» - оберткой над OpenGL.
Функция | Описание функции |
---|---|
auxSolidSphere(r) | Рисует сферу радиусом r. |
auxSolidCube(w) | Рисует куб с шириной, длиной и высотой, равной w. |
auxSolidBox(w, l, h) | Рисует параллелепипед с шириной w, длиной l и высотой h. |
auxSolidTorus(r, R) | Рисует тор с внутренним радиусом r, и внешним радиусом R. |
auxSolidCylinder(r, h) | Рисует цилиндр с радиусом r в основании и высотой h. |
Для рисования примитивов в виде каркасной сетки пишите «Wire» вместо «Solid».
Функция | Описание функции |
---|---|
auxWireSphere(r) | Рисует сферу радиусом r. |
auxWireCube(w) | Рисует куб с шириной, длиной и высотой, равной w. |
auxWireBox(w, l, h) | Рисует параллелепипед с шириной w, длиной l и высотой h. |
auxWireTorus(r, R) | Рисует тор с внутренним радиусом r, и внешним радиусом R. |
auxWireCylinder(r, h) | Рисует цилиндр с радиусом r в основании и высотой h. |
Изменения системы координат
[править]Для изменения системы координат существуют такие функции как:
Функция | Описание |
---|---|
glTranslate(x, y, z) | Сдвигает текущую систему координат на вектор v{x, y, z}. |
glRotate(x, y, z) | Поворачивает текущую систему координат по всем осям на указанные углы. |
glPushMatrix() | Сохраняет текущую систему координат для возможности ее загрузки. |
glPopMatrix() | Загружает ранее сохраненную систему координат. |
Пример рисования фигур со сдвигом системы координат:
glPushMatrix();
glTranslate(1.4,0,0);
glColor3f(0,1,0);
auxSolidSphere(0.5);
glTranslate(1,0,0);
glColor3f(0,0,1);
auxSolidSphere(0.3);
glPopMatrix();
glColor3f(1,0,0);
auxSolidSphere(0.75); // А теперь рисуем сферу в точке (0, 0, 0).
Примитивы OpenGL
[править]Каждый примитив в OpenGL рисуется следующим образом:
glBegin(GLenum mode);
// Функции отрисовки фигуры.
glEnd();
- mode может принимать одно из нескольких значений: GL_POINTS (для рисования только точек), GL_LINES (для рисования линий - каждая пара вершин задает отрезок), GL_LINE_STRIP (рисуется ломаная через все точки, указанные между glBegin и glEnd), GL_TRIANGLES (каждые 3 вершины задают треугольник), GL_TRIANGLE_STRIP (рисуются треугольники с общей стороной), GL_QUADS (каждые две подряд стоящие пары вершин задают четырехугольник).
- Есть 4 функции для отрисовки фигур. Все их параметры имеют тип double.
Функция | Описание |
---|---|
glVertex2D(x, y) | Рисует 2D точку в координатах (x, y). |
glVertex3D(x, y, z) | Рисует 3D точку в координатах (x, y, z). |
glVertex2dv(a) | Рисует что-либо в соответствии с mode, используя массив из двух переменных. |
glVertex3dv(a) | Рисует что-либо в соответствии с mode, используя массив из трех переменных. |
Установить размер точки в пикселях можно функцией glPointSize(n), где n - количество пикселей.
Функции для работы с примитивами
[править]OpenGL предоставляет широкий набор функций для изменения внешнего вида примитивов перед их отрисовкой.
Функция | Описание | Пояснение |
---|---|---|
glLineStipple(GLint factor, GLushort pattern) | Устанавливает где будет видна линия, а где нет. | Есть некоторое число pattern, которое переводится в двоичную систему. Там где 0 - там линия не видна, где 1 - видна. Первый параметр factor указывает количество повторения одного бита (одной цифры в двоичной записи числа). |
glLineWidth(w) | Устанавливает толщину линии в пикселях. | - |
glPolygonMode(side, m) | Устанавливает с какой стороны рисовать треугольник и как. | Параметр side отвечает за сторону, с которой рисовать треугольник, и может принимать одно из значений: GL_FRONT (спереди), GL_BACK (сзади), GL_FRONT_AND_BACK (с обеих сторон). m указывает, как рисовать треугольник - GL_POINT (рисовать только точки треугольника), GL_LINE (рисует ребра треугольника) и GL_FILL (рисует заполненный треугольник). |
Примитивы OpenGL
[править]Для создания любого из примитивов, приведенных ниже, следует сначала объявить объект типа GLUquadricObj:
GLUquadricObj *name
Далее инициализировать его:
name = gluNewQuadric();
И затем рисовать с его помощью примитивы.
- Стиль примитива, который будет нарисован, задается функцией gluQuadricDrawStyle. В ней первый параметр - ссылка на объект типа GLUquadricObj, второй - стиль отрисовки (GLU_POINT - рисуются только точки, GLU_LINE - рисуются только линии, GLU_FILL - фигура рисуется сплошной).
Функция | Описание | Параметры |
---|---|---|
gluSphere(r, cZ1, cZ2) | Рисует сферу. | r - радиус сферы, cZ1 - количество разбиений по оси Z, а cZ2 - вдоль нее. |
gluSylinder(r, r2, h, cZ1, cZ2) | Рисует цилиндр. | r - нижний радиус цилиндра, r2 - верхний радиус, h - высота цилиндра, cZ1 - количество разбиений по оси Z, а cZ2 - вдоль нее. |
glDisk(r, r2, cZ1, cZ2) | Рисует диск. | r - внутренний радиус диска, r2 - внешний радиус диска, cZ1 - количество разбиений по оси Z, а cZ2 - вдоль нее. |
Сглаживание цветов
[править]Сглаживание цветов включается функцией:
glShadeModel(GL_SMOOTH);
А отключается так:
glShadeModel(GL_FLAT);
Плоскости отсечения
[править]Если Вам надо нарисовать какой-то объект урезанным, то используйте плоскости отсечения. Их может быть 6. Все они называются так: GL_CLIP_PLANE0, GL_CLIP_PLANE1, GL_CLIP_PLANE2, GL_CLIP_PLANE3, GL_CLIP_PLANE4 и GL_CLIP_PLANE5. Для включения плоскости отсечения пишите:
glEnable(p);
Где p - имя одной из перечисленных выше плоскостей. Вспомните, что плоскость задается уравнением A*x+B*y+C*z+D = 0. Если хотите задать плоскости в OpenGL делайте так:
glClipPlane(p, a);
Где p - имя одной из перечисленных выше плоскостей; a - массив из четырех чисел, являющихся коэффициентами A, B, C и числом D.
- Для удаления плоскости - ее деактивации используйте такую конструкцию:
glDisable(p);
Где p - имя одной из перечисленных выше плоскостей.
Отображение нарисованного
[править]Прорисовка на экран всего нарисованного в буфере делается командой:
auxSwapBuffers();