2 Commits

Author SHA1 Message Date
Pc
3171ebe504 Sterowanie 5.0 ? 2025-01-07 21:32:32 +01:00
Pc
039435ed73 Sterowanie na ocene chyba 5.0 ? 2025-01-07 21:25:14 +01:00

View File

@@ -112,6 +112,10 @@ void RotateRoverAndCamera(float angle) {
} }
*/ */
//Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^
bool keyWPressed = false; bool keyWPressed = false;
bool keySPressed = false; bool keySPressed = false;
bool keyAPressed = false; bool keyAPressed = false;
@@ -122,7 +126,17 @@ float Sides = 0.0f; // Pozycja łazika w lewo/prawo
float Rotation = 0.0f; // Rotacja łazika (w stopniach) float Rotation = 0.0f; // Rotacja łazika (w stopniach)
float CameraHeight = 50.0f; // Wysokość kamery float CameraHeight = 50.0f; // Wysokość kamery
float MoveSpeed = 3.0f; // Prędkość poruszania się float MoveSpeed = 1.0f; // Prędkość poruszania się
float velocity = 0.0f; // Aktualna prędkość łazika
const float friction = 0.1f; // Współczynnik tarcia (μ)
const float maxSpeed = 3.0f; // Maksymalna prędkość łazika
const float acceleration = 0.1f;
// Funkcja do poruszania łazikiem // Funkcja do poruszania łazikiem
void MoveRover(bool forward) { void MoveRover(bool forward) {
@@ -153,48 +167,39 @@ void RotateRoverAndCamera(float angle) {
} }
void UpdateRover() { void UpdateRover() {
// Przyspieszanie
if (keyWPressed) { if (keyWPressed) {
if (keyAPressed) { velocity += acceleration;
// Ruch do przodu i skręt w lewo if (velocity > maxSpeed) velocity = maxSpeed;
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
MoveRover(true);
}
else if (keyDPressed) {
// Ruch do przodu i skręt w prawo
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
MoveRover(true);
}
else {
// Ruch do przodu bez skrętu
MoveRover(true);
}
} }
else if (keySPressed) { else if (keySPressed) {
if (keyAPressed) { velocity -= acceleration;
// Ruch do tyłu i skręt w lewo if (velocity < -maxSpeed) velocity = -maxSpeed;
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
MoveRover(false);
}
else if (keyDPressed) {
// Ruch do tyłu i skręt w prawo
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
MoveRover(false);
} }
else { else {
// Ruch do tyłu bez skrętu // Hamowanie (wytracanie prędkości z powodu tarcia)
MoveRover(false); if (velocity > 0) {
velocity -= friction;
if (velocity < 0) velocity = 0;
}
else if (velocity < 0) {
velocity += friction;
if (velocity > 0) velocity = 0;
} }
} }
else {
// Obracanie
if (keyAPressed) { if (keyAPressed) {
// Obrót w miejscu w lewo RotateRoverAndCamera(3.0f);
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
} }
else if (keyDPressed) { else if (keyDPressed) {
// Obrót w miejscu w prawo RotateRoverAndCamera(-3.0f);
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
}
} }
// Aktualizacja pozycji na podstawie prędkości
float radRotation = Rotation * GL_PI / 180.0f;
Sides-= velocity * cos(radRotation);
Foward-= velocity * sin(radRotation);
} }
// Change viewing volume and viewport. Called when window is resized // Change viewing volume and viewport. Called when window is resized
@@ -456,9 +461,9 @@ void RenderScene(void) {
//Sterowanie //Sterowanie
//############################################################################################ //############################################################################################
gluLookAt( gluLookAt(
Foward - 50.0f * sin((Rotation + 180.0f) * GL_PI / 180.0f), // Pozycja kamery wokół łazika (w poziomie) Foward - 100.0f * sin((Rotation + 180.0f) * GL_PI / 180.0f), // Pozycja kamery wokół łazika (w poziomie)
CameraHeight, // Wysokość kamery CameraHeight, // Wysokość kamery
Sides - 50.0f * cos((Rotation + 180.0f) * GL_PI / 180.0f), // Kamera wzdłuż osi X i Z Sides - 100.0f * cos((Rotation + 180.0f) * GL_PI / 180.0f), // Kamera wzdłuż osi X i Z
Foward, 0.0f, Sides, // Punkt, na który patrzy kamera (łazik) Foward, 0.0f, Sides, // Punkt, na który patrzy kamera (łazik)
0.0f, 1.0f, 0.0f // Wektor "góry" 0.0f, 1.0f, 0.0f // Wektor "góry"
); );
@@ -575,6 +580,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
WNDCLASS wc; // Windows class structure WNDCLASS wc; // Windows class structure
HWND hWnd; // Storeage for window handle HWND hWnd; // Storeage for window handle
hInstance = hInst; hInstance = hInst;
// Register Window style // Register Window style
@@ -616,6 +622,8 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
if (hWnd == NULL) return FALSE; if (hWnd == NULL) return FALSE;
const WORD ID_TIMER = 1;
SetTimer(hWnd, ID_TIMER, 100, NULL);
// Display the window // Display the window
ShowWindow(hWnd, SW_SHOW); ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd); UpdateWindow(hWnd);
@@ -879,7 +887,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
break; break;
case WM_TIMER:
{
RenderScene();
SwapBuffers(hDC);
ValidateRect(hWnd, NULL);
break;
}
default: // Passes it on if unproccessed default: // Passes it on if unproccessed
return (DefWindowProc(hWnd, message, wParam, lParam)); return (DefWindowProc(hWnd, message, wParam, lParam));
} }