Шаг 11 - Покрутимся

В этом шаге мы, наконец-то выберемся за пределы 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(ее нет в это примере, но я думаю понятно из названия, что она меняет масштаб).

Для всех геометрических преобразований мы будем в основном использовать эти функции, поэтому от понимания их работы и взаимодействия друг с другом зависит будущее наших шагов ;)

Возможно, что придется немного посидеть с карандашиком и листом бумаги, но это только на пользу (я вот недавно узнал, что писать руками очень трудно, и как я это в школе делал не понимаю).

Теперь пришло время из плоских фигур сделать объемные. Проходите, проходите дальше. Не задерживайтесь в дверях.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Kirill V. Ratkin - 14.01.2000