RhaQ Posted September 6, 2010 Report Share Posted September 6, 2010 Cześć! Zabawę z DirectX zacząłem niedawno (tak jak z całym programowaniem w C++) i wszystko szło gładko, do czasu gdy zachciało mi się dodać obsługę klawiatury do mojego modelu 3D. Otóż za pomocą określonych klawiszy użytkownik miał mieć możliwość obrotu modelu względem wybranej osi (używam do tego DirectInput). W jednym kierunku wszystko działa, natomiast gdy dodaję kolejny, to reaguje tylko na jeden z nich. Poniżej zamieszczam fragment kodu odpowiedzialny za całe to zamieszanie. Kod jest czytelny dla doświadczonego programisty... static float rotX = 0.0f; if(keystate[DIK_UP] && keystate[DIK_LCONTROL] & 0x80) rotX -= 0.03f; if(keystate[DIK_DOWN] && keystate[DIK_LCONTROL] & 0x80) rotX += 0.03f; D3DXMATRIX matRotateX; D3DXMatrixRotationX(&matRotateX, rotX); d3ddev->SetTransform(D3DTS_WORLD, &(matRotateX)); static float rotY = 0.0f; if(keystate[DIK_LEFT] && keystate[DIK_LCONTROL] & 0x80) rotY -= 0.03f; if(keystate[DIK_RIGHT] && keystate[DIK_LCONTROL] & 0x80) rotY += 0.03f; D3DXMATRIX matRotateY; D3DXMatrixRotationY(&matRotateY, rotY); d3ddev->SetTransform(D3DTS_WORLD, &(matRotateY)); Kombinowałem już na różne sposoby, ale brakuje mi skilla. Link to comment Share on other sites More sharing options...
Blind Posted September 6, 2010 Report Share Posted September 6, 2010 Przy pomocy d3ddev->SetTransform ustawiasz macierz transformacji dla modelu, wywołując to kilka razy tracisz poprzednia wartosc. Musisz połączyć mecierze. Jak to zrobić było niedawno na forum. Bodajze pytanie bylo z dzialu delphi + omega www.blinder.pl - Blog Link to comment Share on other sites More sharing options...
RhaQ Posted September 6, 2010 Author Report Share Posted September 6, 2010 ...wywołując to kilka razy tracisz poprzednia wartosc. ...o taką uwagę mi chodziło, dzięki problem rozwiązany! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.