Подробнее...
Просто необходимость использовать не только функцю
клавиши
!
По поводу кода - я не блестал оригинальностью...
Основной цикл проги и все установки взят из уроков NeHe, а так же обработка клавиатуры-она идентична урокам (за что я им черезмерно благодарен !
):
Код:
…
if (PeekMessage (&msg, m_Wnd.hWnd, 0, 0, PM_REMOVE) != 0)
{
if (msg.message != WM_QUIT)
{
DispatchMessage (&msg);
}
else
{
isMessagePumpActive = FALSE;
}
}
else
{
if (m_Wnd.bisVisible == FALSE)
{
WaitMessage();
}
else
{
//По примерам снычала сдесь исользовал функцию обработки клавы – ни какой реакции
KeyEvents(&m_Wnd);
DrawGLScene();
SwapBuffers(m_Wnd.hDC);
}
}
…
Затем я вызывал функцию обработки клавы из самой функции рисования DrawGLScene() – опять управ. клавиши обрабатываются, а остальные – нет.
DrawGLScene():
Код:
...
glRotatef(по X);
glRotatef(по X);
Отрисовка карты высот - использовал код Focus on 3D Terrian
KeyEvents();
Cама функция обработки клавы оригинальностью не блещет:
Код:
void KeyEvents(LPViewPortWnd lpWind)
{
if (lpWind->keyDown[VK_ESCAPE])
TerminateApplication(lpWind);
if (lpWind->keyDown[VK_PRIOR])
{ m_Camera.m_vecEyePos -= m_Camera.m_vecForward*Speed;
}
if (lpWind->keyDown[VK_NEXT])
{ m_Camera.m_vecEyePos += m_Camera.m_vecForward*Speed;
}
if (lpWind->keyDown[VK_UP])
fRotX -= 1.5;
if (lpWind->keyDown[VK_DOWN])
fRotX += 1.5;
if (lpWind->keyDown[VK_LEFT])
fRotY -= 1.5;
//if (lpWind->keyDown[VK_RIGHT])
// fRotY += 1.5;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (lpWind->keyDown[‘a’]) – на такой код реакции ни какой
fRotY += 1.5;
}
Да и в функции обработки событий (опять же по NeHe!) предусмотрено использование символьных клавиш:
Код:
…
case WM_KEYDOWN:
if ((wParam >= 0) && (wParam <= 255))
{
window->keyDown[wParam] = TRUE;
return 0;
}
break;
case WM_KEYUP:
if ((wParam >= 0) && (wParam <= 255))
{
window->keyDown [wParam] = FALSE;
return 0;
}
break;
…
[/code]