Sterowanie na ocene chyba 5.0 ?
This commit is contained in:
566
main.cpp
566
main.cpp
@@ -60,7 +60,7 @@ static GLsizei lastWidth;
|
||||
|
||||
// Opis tekstury
|
||||
BITMAPINFOHEADER bitmapInfoHeader; // nagłówek obrazu
|
||||
unsigned char* bitmapData; // dane tekstury
|
||||
unsigned char* bitmapData; // dane tekstury
|
||||
unsigned int texture[2]; // obiekt tekstury
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
@@ -76,7 +76,7 @@ int monitormodecounter = 0;
|
||||
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)
|
||||
@@ -110,6 +110,97 @@ void RotateRoverAndCamera(float angle) {
|
||||
if (Rotation >= 360.0f) Rotation -= 360.0f;
|
||||
if (Rotation < 0.0f) Rotation += 360.0f;
|
||||
}
|
||||
*/
|
||||
//Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
|
||||
|
||||
bool keyWPressed = false;
|
||||
bool keySPressed = false;
|
||||
bool keyAPressed = false;
|
||||
bool keyDPressed = false;
|
||||
|
||||
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)
|
||||
|
||||
float CameraHeight = 50.0f; // Wysokość kamery
|
||||
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) {
|
||||
// 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 -= MoveSpeed * moveX;
|
||||
Foward -= MoveSpeed * moveZ;
|
||||
}
|
||||
// Ruch w tył
|
||||
else {
|
||||
Sides += MoveSpeed * moveX;
|
||||
Foward += MoveSpeed * moveZ;
|
||||
}
|
||||
}
|
||||
|
||||
// Funkcja do obracania łazika wokół osi Y
|
||||
void RotateRoverAndCamera(float angle) {
|
||||
Rotation += angle;
|
||||
if (Rotation >= 360.0f) Rotation -= 360.0f;
|
||||
if (Rotation < 0.0f) Rotation += 360.0f;
|
||||
}
|
||||
|
||||
void UpdateRover() {
|
||||
// Przyspieszanie
|
||||
if (keyWPressed) {
|
||||
velocity += acceleration;
|
||||
if (velocity > maxSpeed) velocity = maxSpeed;
|
||||
}
|
||||
else if (keySPressed) {
|
||||
velocity -= acceleration;
|
||||
if (velocity < -maxSpeed) velocity = -maxSpeed;
|
||||
}
|
||||
else {
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
// Obracanie
|
||||
if (keyAPressed) {
|
||||
RotateRoverAndCamera(3.0f);
|
||||
}
|
||||
else if (keyDPressed) {
|
||||
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
|
||||
void ChangeSize(GLsizei w, GLsizei h) {
|
||||
@@ -153,7 +244,7 @@ void ChangeSize(GLsizei w, GLsizei h) {
|
||||
unsigned char* LoadBitmapFile(char* filename, BITMAPINFOHEADER* bitmapInfoHeader) {
|
||||
FILE* filePtr; // wskaźnik pozycji pliku
|
||||
BITMAPFILEHEADER bitmapFileHeader; // nagłówek pliku
|
||||
unsigned char* bitmapImage; // dane obrazu
|
||||
unsigned char* bitmapImage; // dane obrazu
|
||||
int imageIdx = 0; // licznik pikseli
|
||||
unsigned char tempRGB; // zmienna zamiany składowych
|
||||
|
||||
@@ -238,7 +329,7 @@ void SetDCPixelFormat(HDC hDC) {
|
||||
}
|
||||
|
||||
lazik user(10.0f, 0.0f, 0.0f, "res/models/lazik4.obj");
|
||||
plane mapa(0.0f, 0.0f, 0.0f, "res/models/mapka2.obj");
|
||||
plane mapa(0.0f, 0.0f, 0.0f, "res/models/mapka2.obj");
|
||||
|
||||
void SetupRC() {
|
||||
// Light values and coordinates
|
||||
@@ -278,7 +369,7 @@ void SetupRC() {
|
||||
// White background
|
||||
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
// Black brush
|
||||
|
||||
|
||||
glColor3f(0.0, 0.0, 0.0);
|
||||
|
||||
// Initialize GLEW
|
||||
@@ -295,7 +386,7 @@ void SetupRC() {
|
||||
// do przepisania kodu na podobny do tego stąd:
|
||||
// https://github.com/opengl-tutorials/ogl/blob/master/tutorial07_model_loading/tutorial07.cpp
|
||||
timestampedCout("Inicjalizowanie GLFW3...");
|
||||
if(!glfwInit()) {
|
||||
if (!glfwInit()) {
|
||||
timestampedCout("Failed to initialize GLFW");
|
||||
}
|
||||
timestampedCout("Zainicjalizowano GLFW3.");
|
||||
@@ -332,11 +423,11 @@ void RenderScene(void) {
|
||||
// );
|
||||
|
||||
switch (polygonmode) {
|
||||
case 1:
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
break;
|
||||
default:
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
case 1:
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
break;
|
||||
default:
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
}
|
||||
|
||||
// prymitywny licznik FPS
|
||||
@@ -370,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"
|
||||
);
|
||||
@@ -385,15 +476,17 @@ void RenderScene(void) {
|
||||
|
||||
// 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();
|
||||
UpdateRover();
|
||||
glPopMatrix();
|
||||
|
||||
|
||||
// Zamiana buforów (double buffering)
|
||||
|
||||
|
||||
|
||||
// Swap buffers
|
||||
//glfwSwapBuffers(window);
|
||||
@@ -487,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
|
||||
@@ -528,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);
|
||||
@@ -547,243 +643,259 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
static HGLRC hRC; // Permenant Rendering context
|
||||
static HDC hDC; // Private GDI Device context
|
||||
|
||||
float radRotation = Rotation * GL_PI / 180.0f;
|
||||
float radRotation = Rotation * GL_PI / 180.0f;
|
||||
switch (message) {
|
||||
// Window creation, setup for OpenGL
|
||||
case WM_CREATE:
|
||||
// Store the device context
|
||||
hDC = GetDC(hWnd);
|
||||
case WM_CREATE:
|
||||
// Store the device context
|
||||
hDC = GetDC(hWnd);
|
||||
|
||||
// Select the pixel format
|
||||
SetDCPixelFormat(hDC);
|
||||
// Select the pixel format
|
||||
SetDCPixelFormat(hDC);
|
||||
|
||||
// Create palette if needed
|
||||
hPalette = GetOpenGLPalette(hDC);
|
||||
// Create palette if needed
|
||||
hPalette = GetOpenGLPalette(hDC);
|
||||
|
||||
// Create the rendering context and make it current
|
||||
hRC = wglCreateContext(hDC);
|
||||
wglMakeCurrent(hDC, hRC);
|
||||
SetupRC();
|
||||
|
||||
/*
|
||||
glGenTextures(2, &texture[0]); // tworzy obiekt tekstury
|
||||
// Create the rendering context and make it current
|
||||
hRC = wglCreateContext(hDC);
|
||||
wglMakeCurrent(hDC, hRC);
|
||||
SetupRC();
|
||||
|
||||
// ładuje pierwszy obraz tekstury:
|
||||
bitmapData = LoadBitmapFile((char*)"Bitmapy\\checker.bmp", &bitmapInfoHeader);
|
||||
/*
|
||||
glGenTextures(2, &texture[0]); // tworzy obiekt tekstury
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury
|
||||
// ładuje pierwszy obraz tekstury:
|
||||
bitmapData = LoadBitmapFile((char*)"Bitmapy\\checker.bmp", &bitmapInfoHeader);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
||||
// tworzy obraz tekstury
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
|
||||
bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
|
||||
if (bitmapData) free(bitmapData);
|
||||
// tworzy obraz tekstury
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
|
||||
bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
|
||||
|
||||
// ładuje drugi obraz tekstury:
|
||||
bitmapData = LoadBitmapFile((char*)"Bitmapy\\crate.bmp", &bitmapInfoHeader);
|
||||
glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury
|
||||
if (bitmapData) free(bitmapData);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
// ładuje drugi obraz tekstury:
|
||||
bitmapData = LoadBitmapFile((char*)"Bitmapy\\crate.bmp", &bitmapInfoHeader);
|
||||
glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
||||
// tworzy obraz tekstury
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
|
||||
bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
|
||||
if (bitmapData) free(bitmapData);
|
||||
// tworzy obraz tekstury
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
|
||||
bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
|
||||
|
||||
// ustalenie sposobu mieszania tekstury z tłem
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
if (bitmapData) free(bitmapData);
|
||||
|
||||
*/
|
||||
break;
|
||||
// ustalenie sposobu mieszania tekstury z tłem
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
|
||||
*/
|
||||
break;
|
||||
|
||||
// Window is being destroyed, cleanup
|
||||
case WM_DESTROY:
|
||||
// Deselect the current rendering context and delete it
|
||||
wglMakeCurrent(hDC, NULL);
|
||||
wglDeleteContext(hRC);
|
||||
case WM_DESTROY:
|
||||
// Deselect the current rendering context and delete it
|
||||
wglMakeCurrent(hDC, NULL);
|
||||
wglDeleteContext(hRC);
|
||||
|
||||
// Delete the palette if it was created
|
||||
if (hPalette != NULL) DeleteObject(hPalette);
|
||||
// Delete the palette if it was created
|
||||
if (hPalette != NULL) DeleteObject(hPalette);
|
||||
|
||||
// Tell the application to terminate after the window
|
||||
// is gone.
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
// Tell the application to terminate after the window
|
||||
// is gone.
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
// Window is resized.
|
||||
case WM_SIZE:
|
||||
// Call our function which modifies the clipping
|
||||
// volume and viewport
|
||||
ChangeSize(LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
case WM_SIZE:
|
||||
// Call our function which modifies the clipping
|
||||
// volume and viewport
|
||||
ChangeSize(LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
|
||||
// The painting function. This message sent by Windows
|
||||
// whenever the screen needs updating.
|
||||
case WM_PAINT:
|
||||
// Call OpenGL drawing code
|
||||
RenderScene();
|
||||
case WM_PAINT:
|
||||
// Call OpenGL drawing code
|
||||
RenderScene();
|
||||
|
||||
SwapBuffers(hDC);
|
||||
SwapBuffers(hDC);
|
||||
|
||||
// Validate the newly painted client area
|
||||
if (!monitormode) ValidateRect(hWnd, NULL);
|
||||
else InvalidateRect(hWnd, NULL, FALSE);
|
||||
break;
|
||||
// Validate the newly painted client area
|
||||
if (!monitormode) ValidateRect(hWnd, NULL);
|
||||
else InvalidateRect(hWnd, NULL, FALSE);
|
||||
break;
|
||||
|
||||
// Windows is telling the application that it may modify
|
||||
// the system palette. This message in essance asks the
|
||||
// application for a new palette.
|
||||
case WM_QUERYNEWPALETTE:
|
||||
// If the palette was created.
|
||||
if (hPalette) {
|
||||
int nRet;
|
||||
case WM_QUERYNEWPALETTE:
|
||||
// If the palette was created.
|
||||
if (hPalette) {
|
||||
int nRet;
|
||||
|
||||
// Selects the palette into the current device context
|
||||
SelectPalette(hDC, hPalette, FALSE);
|
||||
// Selects the palette into the current device context
|
||||
SelectPalette(hDC, hPalette, FALSE);
|
||||
|
||||
// Map entries from the currently selected palette to
|
||||
// the system palette. The return value is the number
|
||||
// of palette entries modified.
|
||||
nRet = RealizePalette(hDC);
|
||||
// Map entries from the currently selected palette to
|
||||
// the system palette. The return value is the number
|
||||
// of palette entries modified.
|
||||
nRet = RealizePalette(hDC);
|
||||
|
||||
// Repaint, forces remap of palette in current window
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
// Repaint, forces remap of palette in current window
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
|
||||
return nRet;
|
||||
}
|
||||
break;
|
||||
return nRet;
|
||||
}
|
||||
break;
|
||||
|
||||
// This window may set the palette, even though it is not the
|
||||
// currently active window.
|
||||
case WM_PALETTECHANGED:
|
||||
// Don't do anything if the palette does not exist, or if
|
||||
// this is the window that changed the palette.
|
||||
if ((hPalette != NULL) && ((HWND)wParam != hWnd)) {
|
||||
// Select the palette into the device context
|
||||
SelectPalette(hDC, hPalette, FALSE);
|
||||
case WM_PALETTECHANGED:
|
||||
// Don't do anything if the palette does not exist, or if
|
||||
// this is the window that changed the palette.
|
||||
if ((hPalette != NULL) && ((HWND)wParam != hWnd)) {
|
||||
// Select the palette into the device context
|
||||
SelectPalette(hDC, hPalette, FALSE);
|
||||
|
||||
// Map entries to system palette
|
||||
RealizePalette(hDC);
|
||||
// Map entries to system palette
|
||||
RealizePalette(hDC);
|
||||
|
||||
// Remap the current colors to the newly realized palette
|
||||
UpdateColors(hDC);
|
||||
return 0;
|
||||
}
|
||||
// Remap the current colors to the newly realized palette
|
||||
UpdateColors(hDC);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_KEYUP:
|
||||
switch (wParam) {
|
||||
case 'W':
|
||||
keyWPressed = false;
|
||||
break;
|
||||
case 'S':
|
||||
keySPressed = false;
|
||||
break;
|
||||
case 'A':
|
||||
keyAPressed = false;
|
||||
break;
|
||||
case 'D':
|
||||
keyDPressed = false;
|
||||
break;
|
||||
// Obsługa innych klawiszy
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case WM_KEYDOWN:
|
||||
|
||||
|
||||
|
||||
switch (wParam) {
|
||||
|
||||
case VK_UP:
|
||||
xRot -= 5.0f;
|
||||
break;
|
||||
|
||||
// Key press, check for arrow keys to do cube rotation.
|
||||
case WM_KEYDOWN:
|
||||
|
||||
switch (wParam) {
|
||||
case VK_UP:
|
||||
xRot -= 5.0f;
|
||||
break;
|
||||
|
||||
case VK_DOWN:
|
||||
xRot += 5.0f;
|
||||
break;
|
||||
|
||||
case VK_LEFT:
|
||||
yRot -= 5.0f;
|
||||
break;
|
||||
|
||||
case VK_RIGHT:
|
||||
yRot += 5.0f;
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
zRot += 5.0f;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
zRot -= 5.0f;
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
xRot = 0;
|
||||
yRot = 0;
|
||||
zRot = 0;
|
||||
break;
|
||||
|
||||
case ' ': // 32
|
||||
polygonmode = !polygonmode;
|
||||
if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!");
|
||||
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
|
||||
monitormode = !monitormode;
|
||||
if (monitormode) {
|
||||
monitormodehelper = std::time(nullptr) - 1;
|
||||
timestampedCout("Wlaczono tryb monitorowania wydajnosci.");
|
||||
}
|
||||
if (!monitormode) timestampedCout("Wylaczono tryb monitorowania wydajnosci.");
|
||||
break;
|
||||
|
||||
default:
|
||||
timestampedCout("Nacisnieto nierozpoznany klawisz: " << (int)wParam);
|
||||
}
|
||||
|
||||
xRot = (const int)xRot % 360;
|
||||
yRot = (const int)yRot % 360;
|
||||
zRot = (const int)zRot % 360;
|
||||
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
case VK_DOWN:
|
||||
xRot += 5.0f;
|
||||
break;
|
||||
|
||||
case VK_LEFT:
|
||||
yRot -= 5.0f;
|
||||
break;
|
||||
|
||||
case VK_RIGHT:
|
||||
yRot += 5.0f;
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
zRot += 5.0f;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
zRot -= 5.0f;
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
xRot = 0;
|
||||
yRot = 0;
|
||||
zRot = 0;
|
||||
break;
|
||||
|
||||
case ' ': // 32
|
||||
polygonmode = !polygonmode;
|
||||
if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!");
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
keyWPressed = true;
|
||||
break;
|
||||
case 'S':
|
||||
keySPressed = true;
|
||||
break;
|
||||
case 'A':
|
||||
keyAPressed = true;
|
||||
break;
|
||||
case 'D':
|
||||
keyDPressed = true;
|
||||
break;
|
||||
|
||||
case 114: // F3
|
||||
monitormode = !monitormode;
|
||||
if (monitormode) {
|
||||
monitormodehelper = std::time(nullptr) - 1;
|
||||
timestampedCout("Wlaczono tryb monitorowania wydajnosci.");
|
||||
}
|
||||
if (!monitormode) timestampedCout("Wylaczono tryb monitorowania wydajnosci.");
|
||||
break;
|
||||
|
||||
default:
|
||||
timestampedCout("Nacisnieto nierozpoznany klawisz: " << (int)wParam);
|
||||
}
|
||||
|
||||
xRot = (const int)xRot % 360;
|
||||
yRot = (const int)yRot % 360;
|
||||
zRot = (const int)zRot % 360;
|
||||
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
break;
|
||||
|
||||
// A menu command
|
||||
case WM_COMMAND:
|
||||
case WM_COMMAND:
|
||||
|
||||
switch (LOWORD(wParam)) {
|
||||
switch (LOWORD(wParam)) {
|
||||
|
||||
// Exit the program
|
||||
case ID_FILE_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
|
||||
// Display the about box
|
||||
case ID_HELP_ABOUT:
|
||||
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, (DLGPROC)AboutDlgProc);
|
||||
break;
|
||||
|
||||
}
|
||||
// Exit the program
|
||||
case ID_FILE_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
|
||||
default: // Passes it on if unproccessed
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
// Display the about box
|
||||
case ID_HELP_ABOUT:
|
||||
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, (DLGPROC)AboutDlgProc);
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
case WM_TIMER:
|
||||
{
|
||||
RenderScene();
|
||||
SwapBuffers(hDC);
|
||||
ValidateRect(hWnd, NULL);
|
||||
break;
|
||||
}
|
||||
default: // Passes it on if unproccessed
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
}
|
||||
|
||||
return (0L);
|
||||
@@ -794,46 +906,46 @@ BOOL APIENTRY AboutDlgProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) {
|
||||
|
||||
switch (message) {
|
||||
// Initialize the dialog box
|
||||
case WM_INITDIALOG:
|
||||
int i;
|
||||
GLenum glError;
|
||||
case WM_INITDIALOG:
|
||||
int i;
|
||||
GLenum glError;
|
||||
|
||||
// glGetString demo
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_VENDOR, reinterpret_cast<LPCSTR>(glGetString(GL_VENDOR)));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_RENDERER, (LPCSTR)glGetString(GL_RENDERER));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_VERSION, (LPCSTR)glGetString(GL_VERSION));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_EXTENSIONS, (LPCSTR)glGetString(GL_EXTENSIONS));
|
||||
// glGetString demo
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_VENDOR, reinterpret_cast<LPCSTR>(glGetString(GL_VENDOR)));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_RENDERER, (LPCSTR)glGetString(GL_RENDERER));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_VERSION, (LPCSTR)glGetString(GL_VERSION));
|
||||
SetDlgItemText(hDlg, IDC_OPENGL_EXTENSIONS, (LPCSTR)glGetString(GL_EXTENSIONS));
|
||||
|
||||
// gluGetString demo
|
||||
SetDlgItemText(hDlg, IDC_GLU_VERSION, (LPCSTR)gluGetString(GLU_VERSION));
|
||||
SetDlgItemText(hDlg, IDC_GLU_EXTENSIONS, (LPCSTR)gluGetString(GLU_EXTENSIONS));
|
||||
// gluGetString demo
|
||||
SetDlgItemText(hDlg, IDC_GLU_VERSION, (LPCSTR)gluGetString(GLU_VERSION));
|
||||
SetDlgItemText(hDlg, IDC_GLU_EXTENSIONS, (LPCSTR)gluGetString(GLU_EXTENSIONS));
|
||||
|
||||
|
||||
// Display any recent error messages
|
||||
i = 0;
|
||||
do {
|
||||
glError = glGetError();
|
||||
SetDlgItemText(hDlg, IDC_ERROR1 + i, (LPCSTR)gluErrorString(glError));
|
||||
i++;
|
||||
} while (i < 6 && glError != GL_NO_ERROR);
|
||||
// Display any recent error messages
|
||||
i = 0;
|
||||
do {
|
||||
glError = glGetError();
|
||||
SetDlgItemText(hDlg, IDC_ERROR1 + i, (LPCSTR)gluErrorString(glError));
|
||||
i++;
|
||||
} while (i < 6 && glError != GL_NO_ERROR);
|
||||
|
||||
|
||||
return (TRUE);
|
||||
return (TRUE);
|
||||
|
||||
break;
|
||||
break;
|
||||
|
||||
// Process command messages
|
||||
case WM_COMMAND:
|
||||
case WM_COMMAND:
|
||||
|
||||
// Validate and Make the changes
|
||||
if (LOWORD(wParam) == IDOK) EndDialog(hDlg, TRUE);
|
||||
break;
|
||||
// Validate and Make the changes
|
||||
if (LOWORD(wParam) == IDOK) EndDialog(hDlg, TRUE);
|
||||
break;
|
||||
|
||||
// Closed from sysbox
|
||||
case WM_CLOSE:
|
||||
case WM_CLOSE:
|
||||
|
||||
EndDialog(hDlg, TRUE);
|
||||
break;
|
||||
EndDialog(hDlg, TRUE);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user