Тема этой главы — трансляция. Трансляция — это сдвиг объекта в пространстве без изменения его формы.
Представьте треугольник вокруг центра нашей матрицы ( 0, 0, 0). Вершины пусть будут: ( 0,-1, 0); (-1,-1, 0); ( 1,-1, 0);
Есть два способа сдвинуть треугольник вправо. Первый состоит в сдвиге вершин треугольника: ( 1,-1, 0); ( 0, -1, 0); ( 2, -1, 0); Другой способ — надо сдвинуть всю матрицу вправо и перерисовать треугольник вокруг нового центра матрицы. Вот это-то и есть трансляция.
Трансляции осуществляются при помощи glTranslate()
. Следует задать 3 параметра, значения сдвига матрицы по x/ y/ z. Новый центр матрицы будет в точке с этими координатами. Приведем здесь небольшой код трансляции треугольника.
glClear( GL_COLOR_BUFFER_BIT ); glLoadIdentity(); glTranslatef(0.9,0.0,0.0); glBegin( GL_TRIANGLES ); glColor3f(1.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glColor3f(0.0, 1.0, 0.0); glVertex3f(-1.0, -1.0, 0.0); glColor3f(0.0, 0.0, 1.0); glVertex3f(1.0, -1.0, 0.0); glEnd();
А полный код примера здесь. Вся матрица сдвигается вправо на 0.9 единиц.
С помощью glLoadIdentity();
мы выполняем сброс матрицы, располагая ее в первоначальных координатах. Если удалить эту строку, матрица каждый раз будет сдвигаться ( а раз — это шаг в главном цикле). Вот и все.
Обратите также внимание на следующее. В этот раз мы используем новый цвет для каждой вершины. Это значит, что каждая вершина рисуется своим цвето, а затем цвет "смешивается" с цветами соседних вершин. Получается раскрашенный треугольник.
FPC | 3.2.2 | release |
Lazarus | 3.2 | release |
MSE | 5.10.0 | release |
fpGUI | 1.4.1 | release |