눌려진 키를 기반으로 카메라 위치를 업데이트하는 데 문제가 있습니다. 간단히 말하면, 카메라를 화살표 키를 사용하여 왼쪽, 오른쪽, 앞으로, 뒤로 으로 이동하려고합니다. 프로그램이 실행되면 카메라가 정확한 위치에서 시작되고, 또한 키가 눌러지면 프로그램은 키가 눌려 졌음을 등록하지만 카메라는 이에 따라 업데이트하지 않습니다.키가 작동하지 않는 카메라 움직임 업데이트
무엇이든지, 루프의 else 문 (내 gyrating 큐브가있는 곳) 내에서 작업이 수행되지 않는 문제가 있습니다. 가장 큰 장애물은 루프의 키 값을 가져 와서 카메라 위치를 업데이트 할 수 있도록하는 것입니다. 다음에 어디서 볼 것인가에 대한 아이디어 나 제안은 없습니까?
Render.cpp
Render *renderDraw = new Render(renderWinWidth, renderWinHeight);
Camera *camera = new Camera();
void Render::renderScreen(Camera *cam)
{
...
gluLookAt(cam->getCameraX(), cam->getCameraY(), cam->getCameraZ(),
objPos[0], objPos[1], objPos[2], VECTOR_UP[0], VECTOR_UP[1], VECTOR_UP[2]);
...
glFlush();
}
Camera.cpp
void Camera::setkeyPressed(WPARAM wParam, HWND hWnd, bool isPressed)
{
keyPressed[wParam] = isPressed;
switch(wParam)
{
case VK_UP:
//MessageBox(hWnd, L"key up", L"Key pressed", MB_OK | MB_ICONASTERISK);
newPos_ = getCameraX();
newPos_ -= 2.0f;
setCameraX(newPos_);
break;
case VK_DOWN:
//MessageBox(hWnd, L"key down", L"Key pressed", MB_OK | MB_ICONASTERISK);
newPos_ = getCameraX();
newPos_ += 2.0f;
setCameraX(newPos_);
break;
case VK_LEFT:
//MessageBox(hWnd, L"key left", L"Key pressed", MB_OK | MB_ICONASTERISK);
newPos_ = getCameraZ();
newPos_ += 2.0f;
setCameraZ(newPos_);
break;
case VK_RIGHT:
//MessageBox(hWnd, L"key right", L"Key pressed", MB_OK | MB_ICONASTERISK);
newPos_ = getCameraZ();
newPos_ -= 2.0f;
setCameraZ(newPos_);
break;
}
}
MAIN.CPP
다음과 같다 : 여기서 는 코드BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
...
// Main Loop
while (isRunning)
{
if (PeekMessage (&msg, hWnd, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
isRunning = false;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
renderDraw->renderScreen(camera); <-Contains gyrating cube
SwapBuffers(*hDC);
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
....
switch (message)
{
case WM_KEYDOWN:
switch (wParam)
{
camera->setkeyPressed(wParam, hWndChild, true);
break;
}
break;
....
}
}
알 수 없습니다. 귀하의 프로그램이 Windows 메시지 루프 또는 메인 루프를 실행합니까?. getMessage 또는 peekMessage를 사용하고 있습니까? –
@LefterisE PeekMessage를 사용하고 있습니다. 'else'내 애니메이션 (회전 큐브)은 제대로 업데이트되지만 InitInstance에 WPARAM이 없으므로 키 이벤트를 루프 내에 등록하는 데 문제가 있습니다. 나는 그것을 업데이트했다 PeekMessage – SpicyWeenie
DispatchMessage는 적절한 WPARAM으로 WndProc을 호출 할 것입니다. –