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 руб./мес


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




 23 - Перемещение камеры в пространстве (Способ 1) / Direct3D / Microsoft DirectX

Шаг 23 - Перемещение камеры в пространстве (Способ 1)

Попробуем переместить камеру через нажатие клавиш. Этот способ не совсем правильный, но его всех проще реализовать. В конце этого шага я расскажу о недостатках такого способа.

Для начала откроем свой последний проект. И добавим одну единственную функцию реагирующую на клавиши. Установим мигающий курсор в класс CMainWnd и добавим событие: WM_CHAR - OnChar, более подробно о событиях рассказано в "Шаг 11 - Добавляем событие OnPaint, LButtonDbl и устанавливаем полноэкранный режим средствами MFC".

И заполним получившуюся функцию:

void CMainWnd::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: Add your message handler code here and/or call default
	CFrameWnd::OnChar(nChar, nRepCnt, nFlags);

	switch (nChar)
	{
	case 'a':
		x+=(float)0.03;
		break;
	case 'd':
		x-=(float)0.03;
		break; 
	case 'w':
		cameraz+=(float)0.5;
		break;
	case 's':
		cameraz-=(float)0.5;
		break;
	}
}

Переменную х нужно объявить в классе CMainWnd как float x;. Также перейдите в функцию Transform3D и закомментируйте строку:

//static float x; x+=(float)0.003;

И не забудьте в конструкторе класса окна рамки к значению х присвоить нуль.

x = 0;

В классе окна-рамки объявите переменную:

float cameraz;

Начальное значение присвойте ему в конструкторе класса окна-рамки:

cameraz = -70;

И в функции Transform3D измените функцию D3DXMatrixLookAtLH, вместо -70 укажите cameraz:

D3DXMatrixLookAtLH (&matView,
	&D3DXVECTOR3 (0.0f, 0, cameraz),
	&D3DXVECTOR3 (0.0f, 0.0f, 0.0f),
	&D3DXVECTOR3 (0.0f, 1.0f, 0.0f));

Все, можете запускать приложение и клавишами , , W, S, Вы можете немного поперемещаться в пространстве. Если Вам не хватает перемещений, можете добавить сами :)

Теперь о недостатках:

Попробуйте приблизить куб и начать его вращать, Вы заметите, как он дергается на экране. Чтобы такого не было и все действия пользователя создаваемые при помощи джойстика, мышки или клавиатуры были плавными, нам нужно использовать DirectInput, но об этом поговорим попозже.


Загрузить проект | | |
Автор Хавов Евгений Валерьевич.
[AD]