押されたキーに基づいてカメラの位置を更新することに問題があります。簡単に言えば、矢印キーを使用してカメラを左、右、前方、後方に動かそうとしています。プログラムが実行されると、カメラは正しい位置で起動します。さらに、キーが押されると、プログラムはキーが押されたことを登録しますが、カメラはそれに応じて更新されません。
どちらかといえば、アクションがループのelseステートメント内で実行されていないため、問題が発生しています(回転キューブが存在する場所)。私の最大の障害は、カメラの位置を更新できるように、押されたキーの値をループに入れることです。次にどこを見るべきかについてのアイデアや提案はありますか?
コードは次のとおりです。
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();
}
カメラ.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;
....
}
}