From 780e8525965fc19df851c46f58caefacb17001af Mon Sep 17 00:00:00 2001 From: Pc Date: Mon, 26 Jan 2026 19:38:16 +0100 Subject: [PATCH] fix: rendering --- main.cpp | 152 +++++++++++++++++++++++-------------------------------- 1 file changed, 64 insertions(+), 88 deletions(-) diff --git a/main.cpp b/main.cpp index 34e7a61..fc15e28 100644 --- a/main.cpp +++ b/main.cpp @@ -812,107 +812,83 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) float radRotation = Rotation * GL_PI / 180.0f; switch (message) { // Window creation, setup for OpenGL - case WM_CREATE: + case WM_CREATE: + { + // 1. NAJPIERW INICJALIZACJA KONTEKSTU WINDOWS I OPENGL + // Bez tego funkcje gl... nie będą działać! + hDC = GetDC(hWnd); + SetDCPixelFormat(hDC); + hPalette = GetOpenGLPalette(hDC); + hRC = wglCreateContext(hDC); + wglMakeCurrent(hDC, hRC); + + // Inicjalizacja GLEW i modeli (Twoja funkcja) + SetupRC(); + + // 2. SPRAWDZENIE MOŻLIWOŚCI KARTY GRAFICZNEJ GLfloat fLargest; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest); - // Przykład dla tekstury podłoża (texture[1]): - glBindTexture(GL_TEXTURE_2D, texture[1]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); // To daje ostrość w dali - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + // 3. GENEROWANIE OBIEKTÓW TEKSTUR + // Używasz indeksów 0, 1, 2, 3 – więc potrzebujesz 4 slotów + glGenTextures(4, &texture[0]); - - // Store the device context - hDC = GetDC(hWnd); - - // Select the pixel format - SetDCPixelFormat(hDC); - - // Create palette if needed - hPalette = GetOpenGLPalette(hDC); - - // Create the rendering context and make it current - hRC = wglCreateContext(hDC); - wglMakeCurrent(hDC, hRC); - SetupRC(); - - - glGenTextures(3, &texture[0]); // tworzy obiekt tekstury - - // ładuje pierwszy obraz tekstury (płotki): + // --- TEKSTURA 0: PŁOTKI --- bitmapData = LoadBitmapFile((char*)"res/img/woodenTextureHighExposure.bmp", &bitmapInfoHeader); + if (bitmapData) { + glBindTexture(GL_TEXTURE_2D, texture[0]); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); // Ostrość pod kątem + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Rozdzielczość w dali (Mipmapy) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Rozdzielczość z bliska + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + free(bitmapData); + } - glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - - // 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_WRAP_S, GL_MIRRORED_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); - - // tworzy obraz tekstury - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, - bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); - - if (bitmapData) free(bitmapData); - - // ładuje drugi obraz tekstury (ziemia): + // --- TEKSTURA 1: ZIEMIA (Najważniejsza dla efektu oddali) --- bitmapData = LoadBitmapFile((char*)"res/img/grass02.bmp", &bitmapInfoHeader); - glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury + if (bitmapData) { + glBindTexture(GL_TEXTURE_2D, texture[1]); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + free(bitmapData); + } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); - - // tworzy obraz tekstury - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, - bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); - - if (bitmapData) free(bitmapData); - - // ładuje trzeci obraz tekstury (dach stodoły): + // --- TEKSTURA 2: DACH STODOŁY --- bitmapData = LoadBitmapFile((char*)"res/img/barnroof.bmp", &bitmapInfoHeader); - glBindTexture(GL_TEXTURE_2D, texture[2]); // aktywuje obiekt tekstury + if (bitmapData) { + glBindTexture(GL_TEXTURE_2D, texture[2]); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + free(bitmapData); + } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - // tworzy obraz tekstury - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, - bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); - - - if (bitmapData) free(bitmapData); - - // ładuje czwarty obraz tekstury (kamienista ściana): + // --- TEKSTURA 3: ŚCIANA --- bitmapData = LoadBitmapFile((char*)"res/img/brickwall.bmp", &bitmapInfoHeader); - glBindTexture(GL_TEXTURE_2D, texture[3]); // aktywuje obiekt tekstury + if (bitmapData) { + glBindTexture(GL_TEXTURE_2D, texture[3]); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + free(bitmapData); + } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - // tworzy obraz tekstury - gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth, - bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); - - if (bitmapData) free(bitmapData); - - // ustalenie sposobu mieszania tekstury z tłem + // Ustalenie sposobu mieszania tekstury z tłem glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - - break; + } + break; // Window is being destroyed, cleanup case WM_DESTROY: