Sterowanie na 3.0
This commit is contained in:
@@ -92,6 +92,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<AdditionalDependencies>glfw3.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
|||||||
97
main.cpp
97
main.cpp
@@ -75,6 +75,42 @@ int monitormode = 0;
|
|||||||
int monitormodecounter = 0;
|
int monitormodecounter = 0;
|
||||||
std::time_t monitormodehelper;
|
std::time_t monitormodehelper;
|
||||||
|
|
||||||
|
//Zmienne do ruchu ##############################################
|
||||||
|
|
||||||
|
float Foward = 0.0f; // Pozycja łazika w przód/tył
|
||||||
|
float Sides = 0.0f; // Pozycja łazika w lewo/prawo
|
||||||
|
float Rotation = 0.0f; // Rotacja łazika (w stopniach)
|
||||||
|
|
||||||
|
// Zmienne do sterowania kamerą
|
||||||
|
float CameraHeight = 50.0f; // Wysokość kamery
|
||||||
|
|
||||||
|
void MoveRover(bool forward) {
|
||||||
|
// Zamieniamy kąt na radiany
|
||||||
|
float radRotation = Rotation * GL_PI / 180.0f;
|
||||||
|
|
||||||
|
// Wektor ruchu w kierunku przód/tył (kierunek łazika)
|
||||||
|
float moveX = cos(radRotation);
|
||||||
|
float moveZ = sin(radRotation);
|
||||||
|
|
||||||
|
// Ruch w przód
|
||||||
|
if (forward) {
|
||||||
|
Sides -= 1.1f * moveX;
|
||||||
|
Foward -= 1.1f * moveZ;
|
||||||
|
}
|
||||||
|
// Ruch w tył
|
||||||
|
else {
|
||||||
|
Sides += 1.1f * moveX;
|
||||||
|
Foward += 1.1f * moveZ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Funkcja do obrotu kamery i łazika (A/D)
|
||||||
|
void RotateRoverAndCamera(float angle) {
|
||||||
|
Rotation += angle;
|
||||||
|
if (Rotation >= 360.0f) Rotation -= 360.0f;
|
||||||
|
if (Rotation < 0.0f) Rotation += 360.0f;
|
||||||
|
}
|
||||||
|
|
||||||
// Change viewing volume and viewport. Called when window is resized
|
// Change viewing volume and viewport. Called when window is resized
|
||||||
void ChangeSize(GLsizei w, GLsizei h) {
|
void ChangeSize(GLsizei w, GLsizei h) {
|
||||||
GLfloat nRange = 100.0f;
|
GLfloat nRange = 100.0f;
|
||||||
@@ -242,6 +278,7 @@ void SetupRC() {
|
|||||||
// White background
|
// White background
|
||||||
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
|
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
// Black brush
|
// Black brush
|
||||||
|
|
||||||
glColor3f(0.0, 0.0, 0.0);
|
glColor3f(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
// Initialize GLEW
|
// Initialize GLEW
|
||||||
@@ -286,6 +323,8 @@ void RenderScene(void) {
|
|||||||
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
|
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
|
||||||
glRotatef(zRot, 0.0f, 0.0f, 1.0f);
|
glRotatef(zRot, 0.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// gluLookAt(
|
// gluLookAt(
|
||||||
// 0, 0, 0, // the position of your camera, in world space
|
// 0, 0, 0, // the position of your camera, in world space
|
||||||
// 0, 0, 0, // where you want to look at, in world space
|
// 0, 0, 0, // where you want to look at, in world space
|
||||||
@@ -325,12 +364,36 @@ void RenderScene(void) {
|
|||||||
// glBindTexture(GL_TEXTURE_2D, Texture);
|
// glBindTexture(GL_TEXTURE_2D, Texture);
|
||||||
// // Set our "myTextureSampler" sampler to use Texture Unit 0
|
// // Set our "myTextureSampler" sampler to use Texture Unit 0
|
||||||
// glUniform1i(TextureID, 0);
|
// glUniform1i(TextureID, 0);
|
||||||
|
//glLoadIdentity(); // Zresetowanie macierzy widoku
|
||||||
|
//
|
||||||
|
//############################################################################################
|
||||||
|
//Sterowanie
|
||||||
|
//############################################################################################
|
||||||
|
gluLookAt(
|
||||||
|
Foward - 50.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
|
||||||
|
Foward, 0.0f, Sides, // Punkt, na który patrzy kamera (łazik)
|
||||||
|
0.0f, 1.0f, 0.0f // Wektor "góry"
|
||||||
|
);
|
||||||
|
|
||||||
glColor3f(1.0, 0.0, 0.0);
|
// Rysowanie mapy (nie porusza się)
|
||||||
user.draw();
|
glPushMatrix();
|
||||||
glColor3f(0.0, 1.0, 0.0);
|
glColor3f(0.0, 1.0, 0.0); // Zielony kolor dla mapy
|
||||||
mapa.draw();
|
mapa.draw();
|
||||||
glColor3f(0.0, 0.0, 0.0);
|
glPopMatrix();
|
||||||
|
|
||||||
|
// Rysowanie łazika (porusza się i obraca)
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(Foward, 0.0f, Sides); // Translacja łazika na jego pozycję
|
||||||
|
glRotatef(Rotation, 0.0f, 1.0f, 0.0f); // Obrót łazika wokół własnej osi
|
||||||
|
glColor3f(1.0, 0.0, 0.0); // Czerwony kolor dla łazika
|
||||||
|
user.draw();
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
|
||||||
|
// Zamiana buforów (double buffering)
|
||||||
|
|
||||||
|
|
||||||
// Swap buffers
|
// Swap buffers
|
||||||
//glfwSwapBuffers(window);
|
//glfwSwapBuffers(window);
|
||||||
@@ -484,6 +547,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
static HGLRC hRC; // Permenant Rendering context
|
static HGLRC hRC; // Permenant Rendering context
|
||||||
static HDC hDC; // Private GDI Device context
|
static HDC hDC; // Private GDI Device context
|
||||||
|
|
||||||
|
float radRotation = Rotation * GL_PI / 180.0f;
|
||||||
switch (message) {
|
switch (message) {
|
||||||
// Window creation, setup for OpenGL
|
// Window creation, setup for OpenGL
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
@@ -620,7 +684,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
// Key press, check for arrow keys to do cube rotation.
|
// Key press, check for arrow keys to do cube rotation.
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
|
|
||||||
switch (wParam) {
|
switch (wParam) {
|
||||||
case VK_UP:
|
case VK_UP:
|
||||||
xRot -= 5.0f;
|
xRot -= 5.0f;
|
||||||
@@ -657,6 +721,29 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!");
|
if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'W': // Ruch w przód
|
||||||
|
MoveRover(true);
|
||||||
|
break;
|
||||||
|
case 'S': // Ruch w tył
|
||||||
|
MoveRover(false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'A': // Obrót w lewo
|
||||||
|
RotateRoverAndCamera(5.0f); // Obrót łazika i kamery w lewo
|
||||||
|
break;
|
||||||
|
case 'D': // Obrót w prawo
|
||||||
|
RotateRoverAndCamera(-5.0f); // Obrót łazika i kamery w prawo
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'J': // Obrót w lewo (wokół własnej osi)
|
||||||
|
Rotation += 5.0f;
|
||||||
|
if (Rotation > 360.0f || Rotation < 0.0f) Rotation -= 360.0f;
|
||||||
|
break;
|
||||||
|
case 'K': // Obrót w prawo (wokół własnej osi)
|
||||||
|
Rotation -= 5.0f;
|
||||||
|
if (Rotation > 360.0f || Rotation < 0.0f) Rotation += 360.0f;
|
||||||
|
break;
|
||||||
|
|
||||||
case 114: // F3
|
case 114: // F3
|
||||||
monitormode = !monitormode;
|
monitormode = !monitormode;
|
||||||
if (monitormode) {
|
if (monitormode) {
|
||||||
|
|||||||
2274083
res/models/mapka3.obj
Normal file
2274083
res/models/mapka3.obj
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user