C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 29 - Перенос / Open GL / Графика

Шаг 29 - Перенос

В этом шаге рассмотрим перенос вещества в пространстве. Создадим проект и приготовимся вращать руками и головой. Добавим в файл stdafx.h следующие строки:

#include <math.h>
#define Pi	3.14159

Как вы понимаете, это для синусов и косинусов. Все остальные изменения проекта будут касаться только функции OnDraw(...). Её код теперь таков:

void CExampleView::OnDraw(CDC* pDC)
{
	CRect clientRect;

	CExampleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: add draw code for native data here
	GetClientRect(&clientRect);
	glViewport(0, 0, clientRect.right, clientRect.bottom);

	glClearColor (0.5, 0.5, 0.75, 1.0);	// цвет фона
	glClear (GL_COLOR_BUFFER_BIT);	// очистка буфера цвета

	glColor3f (1.0, 0.0, 0.5);		// текущий цвет примитивов

	for(int i=0; i<6; i++)
	{
		glTranslatef (-0.7f * (float)cos (Pi * i / 3),
			0.7f * (float)sin (Pi * i / 3), 0.0);
		glRotatef (-60.0f * i, 0, 0, 1);
		glBegin (GL_POLYGON);
			glVertex2f (-0.25f, -0.25f);
			glVertex2f (-0.25f, 0.25f);
			glVertex2f (0.25f, 0.25f);
			glVertex2f (0.25f, -0.25f);
		glEnd();
		glRotatef (60.0f * i, 0, 0, 1);
		glTranslatef (0.7f * (float)cos (Pi * i / 3),
			 -0.7f * (float)sin (Pi * i / 3), 0.0);
	}
	SwapBuffers(pDC->m_hDC);
}

Здесь мы рисуем шесть квадратиков. Но смысл не в том, что мы рисуем, а как. В примере мы шесть раз как бы переносим систему координат. Если быть более точным, то мы 6 раз изменяем матрицу модели, но о матрицах модели и других типах матриц чуть позже. Пока главное понять последовательность действий. Логика такова:

  1. Перемещаем систему координат
  2. Поворачиваем её
  3. Рисуем квадрат
  4. Еще поворачиваем систему координат
  5. Перемещаем систему координат

Не знаю кому как, но мне очень помогает рисование преобразований объекта на бумаге. Попробуйте, например, поменять местами glTranslate и glRotate и потом разобраться почему так получилось.

Как я уже говорил когда-то, операции glTranslate и glRotate одни из самых важных в библиотеке OpenGL, поэтому имеет смысл разобраться что тут к чему на примере 2D, чтобы в 3D к этому не возвращаться.


Загрузить проект | | |
Автор Kirill V. Ratkin.
[AD]