Шаг 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));

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

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

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


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 5.09.2002