feat: rain +day_&_night
This commit is contained in:
96
DayNightCycle.hpp
Normal file
96
DayNightCycle.hpp
Normal file
@@ -0,0 +1,96 @@
|
||||
#ifndef DAYNIGHTCYCLE_HPP
|
||||
#define DAYNIGHTCYCLE_HPP
|
||||
|
||||
#include "GL/glew.h"
|
||||
#include <iostream>
|
||||
|
||||
class DayNightCycle {
|
||||
private:
|
||||
bool isNight;
|
||||
|
||||
public:
|
||||
// Konstruktor - domyślnie startujemy w dzień
|
||||
DayNightCycle() : isNight(false) {}
|
||||
|
||||
// Funkcja przełączająca stan
|
||||
void toggle() {
|
||||
isNight = !isNight;
|
||||
if (isNight) {
|
||||
std::cout << "Tryb: NOC" << std::endl;
|
||||
}
|
||||
else {
|
||||
std::cout << "Tryb: DZIEN" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// Zwraca informację czy jest noc (przydatne np. do włączania świateł łazika)
|
||||
bool isNightMode() const {
|
||||
return isNight;
|
||||
}
|
||||
|
||||
// Główna funkcja ustawiająca światła i tło
|
||||
void apply() {
|
||||
if (isNight) {
|
||||
// === USTAWIENIA NOCNE ===
|
||||
|
||||
// Kolor nieba (Tło) - Ciemny granat/czarny
|
||||
glClearColor(0.05f, 0.05f, 0.1f, 1.0f);
|
||||
|
||||
// GL_LIGHT0 (Księżyc) - Zimne, słabe światło
|
||||
GLfloat nightAmbient[] = { 0.1f, 0.1f, 0.2f, 1.0f };
|
||||
GLfloat nightDiffuse[] = { 0.2f, 0.2f, 0.35f, 1.0f }; // Niebieskawy odcień
|
||||
GLfloat nightSpecular[] = { 0.1f, 0.1f, 0.1f, 1.0f }; // Bardzo słaby połysk
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, nightAmbient);
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, nightDiffuse);
|
||||
glLightfv(GL_LIGHT0, GL_SPECULAR, nightSpecular);
|
||||
|
||||
// GL_LIGHT1 (Doświetlenie cieni) - Prawie wyłączone w nocy
|
||||
GLfloat fillAmbient[] = { 0.02f, 0.02f, 0.05f, 1.0f };
|
||||
GLfloat fillDiffuse[] = { 0.05f, 0.05f, 0.1f, 1.0f };
|
||||
|
||||
glLightfv(GL_LIGHT1, GL_AMBIENT, fillAmbient);
|
||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, fillDiffuse);
|
||||
|
||||
// Opcjonalnie: Włączamy gęstą czarną mgłę dla klimatu
|
||||
glEnable(GL_FOG);
|
||||
GLfloat fogColor[] = { 0.05f, 0.05f, 0.1f, 1.0f };
|
||||
glFogfv(GL_FOG_COLOR, fogColor);
|
||||
glFogi(GL_FOG_MODE, GL_EXP2);
|
||||
glFogf(GL_FOG_DENSITY, 0.002f); // Gęstość mgły
|
||||
|
||||
}
|
||||
else {
|
||||
// === USTAWIENIA DZIENNE ===
|
||||
|
||||
// Kolor nieba (Tło) - Jasny błękit
|
||||
glClearColor(0.53f, 0.81f, 0.92f, 1.0f);
|
||||
|
||||
// GL_LIGHT0 (Słońce) - Ciepłe, jasne światło
|
||||
GLfloat dayAmbient[] = { 0.4f, 0.4f, 0.4f, 1.0f };
|
||||
GLfloat dayDiffuse[] = { 0.9f, 0.9f, 0.8f, 1.0f }; // Lekko żółtawe
|
||||
GLfloat daySpecular[] = { 0.5f, 0.5f, 0.5f, 1.0f };
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, dayAmbient);
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, dayDiffuse);
|
||||
glLightfv(GL_LIGHT0, GL_SPECULAR, daySpecular);
|
||||
|
||||
// GL_LIGHT1 (Doświetlenie cieni)
|
||||
GLfloat fillAmbient[] = { 0.4f, 0.4f, 0.4f, 1.0f };
|
||||
GLfloat fillDiffuse[] = { 0.3f, 0.3f, 0.4f, 1.0f }; // Niebieskawe cienie
|
||||
|
||||
glLightfv(GL_LIGHT1, GL_AMBIENT, fillAmbient);
|
||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, fillDiffuse);
|
||||
|
||||
// Wyłączamy mgłę w dzień (lub ustawiamy bardzo rzadką)
|
||||
glDisable(GL_FOG);
|
||||
}
|
||||
|
||||
// Pozycję światła ustawiamy taką samą dla obu (wysoko w górze)
|
||||
// W przyszłości możesz tu zrobić animację przesuwania się słońca
|
||||
GLfloat lightPos[] = { 100.0f, 150.0f, 100.0f, 0.0f }; // 0.0f na końcu = światło kierunkowe
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user