ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX




Перемещение объектов - часть 4


/b>

Глава 6. Перемещение объектов в макете

Рисунок. 6-2. Взаимосвязь между значениями r, u, v и х, у, z


Библиотека 3dPlus включает поддержку трех различных устройств ввода: клавиатуры, мыши и джойстика. Каждое устройство реализовано в виде класса C++, производного от C3dlnputDevice.

Устройство ввода с клавиатуры

Устройство ввода с клавиатуры обрабатывает сообщения WM_KEYDOWN, посылаемые ему контроллером. Сообщения клавиатуры используются для увеличения или уменьшения текущих значений параметров x,y,z,r,unv.B табл. 6-1 показано, как различные комбинации клавиш влияют на значения выходных параметров.

Таблица 6-1. Управляющие функции клавиатуры
Клавиша Normal Shift Ctrl
Left arrow X- V- u-
Right arrow X++ V++ U++
Up arrow Y++ Z++ R++
Down arrow Y- z- R-
Знак «+» на цифровой клавиатуре Z-

Знак «-» на цифровой клавиатуре Z++

Page Up V++

Page Down V-

Home U++

End u-

Insert R++

Delete R-

He забывайте, что перед тем, как изменять состояние объекта, все выходные значения должны быть обработаны контроллером, поэтому оси с обозначениями х, у, z, r, u и v вовсе не обязаны соответствовать одноименным осям объекта или макета.

Функция, управляющая работой устройства ввода с клавиатуры, представляет собой оператор switch, в котором обрабатываются сообщения от различных клавиш. Ниже приведена первая часть функции из файла SdlnpDev.cpp каталога Source библиотеки 3dPlus, обрабатывающая нажатия клавиш <— и —>:

void C3dKeyInDev::OnKeyDown(HINT nChar, UINT nRepCnt,

UINT nFlags)

(

double dine = 0.02;

switch (nChar) { case VKJ3HIFT:

in_bShift = TROE;

break;

case VK_CONTROL:

m_bControl = TRUE;

break;

case VK_RIGHT:

if (m_b3hift) { Inc(m_st.dV) ;

} else if (m_bControl) { Inc(m_st.dU) ;

) else (

Inc(m_st.dX) ;

} break;

case VK_LEFT:

if (m_bShift) { Dec(m_st.dV) ;

} else if (m_bControl) { Dec(m_st.dU) ;

) else (

Dec(m_st.dX) ;

} break;

Устройство ввода от мыши




Содержание  Назад  Вперед