#include "dx_test.h" // nts: remember! its the 40 things! void CameraMove() { static BYTE keystate[256]; dinkeyboard->GetDeviceState(256, (LPVOID)keystate); D3DXVECTOR3 direction; D3DXVec3Normalize(&direction, &(camera.look - camera.pos)); if (keystate[DIK_W] & 0x80) { camera.look += direction; camera.pos += direction; } if (keystate[DIK_S] & 0x80) { camera.look -= direction; camera.pos -= direction; } if (keystate[DIK_A] & 0x80) { D3DXVec3Cross(&direction, &direction, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); D3DXVec3Normalize(&direction, &direction); camera.pos += direction; camera.look += direction; } if (keystate[DIK_D] & 0x80) { D3DXVec3Cross(&direction, &direction, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); D3DXVec3Normalize(&direction, &direction); camera.pos -= direction; camera.look -= direction; } } void CameraRotate() { static BYTE keystate[256]; dinkeyboard->GetDeviceState(256, (LPVOID)keystate); float x = 0.0f, y = 0.0f; if (keystate[DIK_UP] & 0x80) x += 1.0f; if (keystate[DIK_DOWN] & 0x80) x -= 1.0f; if (keystate[DIK_LEFT] & 0x80) y += 1.0f; if (keystate[DIK_RIGHT] & 0x80) y -= 1.0f; printf("%f %f\n", x, y); if (x != 0.0f || y != 0.0f){ printf("yeah!\n"); D3DXVECTOR3 direction, rotaxis; D3DXMATRIX mrotaxis, mrotz; D3DXVec3Normalize(&direction, &(camera.look - camera.pos)); D3DXVec3Cross(&rotaxis, &rotaxis, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); D3DXVec3Normalize(&rotaxis, &rotaxis); D3DXMatrixRotationAxis(&mrotaxis, &rotaxis, x / -360); D3DXMatrixRotationZ(&mrotz, y / -360); D3DXVec3TransformCoord(&direction, &direction, &(mrotaxis * mrotz)); D3DXVec3TransformCoord(&D3DXVECTOR3(0.0f, 1.0f, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f), &(mrotaxis * mrotz)); camera.look = direction + camera.pos; } return; }