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


         

Взаимосвязь между значениями r, u,


/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;

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


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