В этом шаге мы, наконец-то выберемся за пределы 2D и сможем покруться в свое удовольствие.
Как обычно, создадим новый проект с именем RotTriQuad, скопируем туда файл из ColorTriQuad(предыдущий проект), переименуем этот файл и настроим проект.
Все изменения опять будут только в функции Draw(), но понадобится добавить парочку глобальных переменных Trot и Qrot, это углы поворота для треугольника и для квадрата соответственно.
GLfloat Trot; GLfloat Qrot; GLvoid Draw(GLvoid) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5f, 0.0f, -5.0f); glRotatef(Trot, 1.0f, 1.0f, 1.0f); // вот тут весь секрет // Функция glRotate выполняет вращение текущей матрицы на угол, // указанный первым аргументом и делает это вокруг осей, //заданных 2-м, 3-м, 4-м аргументами, т.е. вокруг x,y,z. // Принципиальное значение имеет последовательность функций // glRotatef(:) // glTranslatef(:) // или // glTranslatef(:) // glRotatef(:) // попробуйте поменять их местами glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( 0.0f, 1.0f, 0.0f); // Top glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left glColor3f(0.0f, 0.0f, 1.0f); glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glEnd(); glLoadIdentity(); // не забудьте привести матрицу, //а то квадратик вокруг треугольничка поедет ;) glTranslatef(1.5f, 0.0f, -5.0f); glRotatef(Qrot, 1.0f, 1.0f, 1.0f); glColor3f(0.3f, 0.2f, 0.4f); glBegin(GL_QUADS); glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left glEnd(); Trot += 0.3f; Qrot -= 0.3f; }
Вот так вот. Это называеся танец примитивов ;)
На этом шаге стоит остановиться и провести время экспериментируя с функциями glTranslatef, glRotatef и glScale(ее нет в это примере, но я думаю понятно из названия, что она меняет масштаб).
Для всех геометрических преобразований мы будем в основном использовать эти функции, поэтому от понимания их работы и взаимодействия друг с другом зависит будущее наших шагов ;)
Возможно, что придется немного посидеть с карандашиком и листом бумаги, но это только на пользу (я вот недавно узнал, что писать руками очень трудно, и как я это в школе делал не понимаю).
Теперь пришло время из плоских фигур сделать объемные. Проходите, проходите дальше. Не задерживайтесь в дверях.