Compare commits
2 Commits
2afc119bb9
...
3171ebe504
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3171ebe504 | ||
|
|
039435ed73 |
84
main.cpp
84
main.cpp
@@ -112,6 +112,10 @@ void RotateRoverAndCamera(float angle) {
|
||||
}
|
||||
*/
|
||||
//Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
|
||||
|
||||
bool keyWPressed = false;
|
||||
bool keySPressed = 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 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
|
||||
void MoveRover(bool forward) {
|
||||
@@ -153,48 +167,39 @@ void RotateRoverAndCamera(float angle) {
|
||||
}
|
||||
|
||||
void UpdateRover() {
|
||||
// Przyspieszanie
|
||||
if (keyWPressed) {
|
||||
if (keyAPressed) {
|
||||
// Ruch do przodu i skręt w lewo
|
||||
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);
|
||||
}
|
||||
velocity += acceleration;
|
||||
if (velocity > maxSpeed) velocity = maxSpeed;
|
||||
}
|
||||
else if (keySPressed) {
|
||||
if (keyAPressed) {
|
||||
// Ruch do tyłu i skręt w lewo
|
||||
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);
|
||||
velocity -= acceleration;
|
||||
if (velocity < -maxSpeed) velocity = -maxSpeed;
|
||||
}
|
||||
else {
|
||||
// Ruch do tyłu bez skrętu
|
||||
MoveRover(false);
|
||||
// Hamowanie (wytracanie prędkości z powodu tarcia)
|
||||
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) {
|
||||
// Obrót w miejscu w lewo
|
||||
RotateRoverAndCamera(3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
RotateRoverAndCamera(3.0f);
|
||||
}
|
||||
else if (keyDPressed) {
|
||||
// Obrót w miejscu w prawo
|
||||
RotateRoverAndCamera(-3.0f); // Dostosuj wartość kąta według potrzeb
|
||||
}
|
||||
RotateRoverAndCamera(-3.0f);
|
||||
}
|
||||
|
||||
// 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
|
||||
@@ -456,9 +461,9 @@ void RenderScene(void) {
|
||||
//Sterowanie
|
||||
//############################################################################################
|
||||
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
|
||||
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)
|
||||
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
|
||||
HWND hWnd; // Storeage for window handle
|
||||
|
||||
|
||||
hInstance = hInst;
|
||||
|
||||
// Register Window style
|
||||
@@ -616,6 +622,8 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
|
||||
if (hWnd == NULL) return FALSE;
|
||||
|
||||
|
||||
const WORD ID_TIMER = 1;
|
||||
SetTimer(hWnd, ID_TIMER, 100, NULL);
|
||||
// Display the window
|
||||
ShowWindow(hWnd, SW_SHOW);
|
||||
UpdateWindow(hWnd);
|
||||
@@ -879,7 +887,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_TIMER:
|
||||
{
|
||||
RenderScene();
|
||||
SwapBuffers(hDC);
|
||||
ValidateRect(hWnd, NULL);
|
||||
break;
|
||||
}
|
||||
default: // Passes it on if unproccessed
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user