feat: improve fps controller / add fog and ambient light to the scene

This commit is contained in:
2026-10-16 09:29:59 +02:00
parent 21621001c2
commit 4c9b77c948
105 changed files with 609 additions and 110 deletions
@@ -300,6 +300,15 @@ bool SceneSerializer::Save(Scene& scene, const std::filesystem::path& path) {
if (scene.m_CurrentCameraId != InvalidObjectId) {
root["currentCamera"] = scene.m_CurrentCameraId;
}
const SceneEnvironment& environment = scene.GetEnvironment();
root["environment"] = {
{"ambientColor", {environment.ambientColor.x, environment.ambientColor.y, environment.ambientColor.z}},
{"ambientIntensity", environment.ambientIntensity},
{"fogColor", {environment.fogColor.x, environment.fogColor.y, environment.fogColor.z}},
{"fogDensity", environment.fogDensity},
{"skyboxRotationSpeed", environment.skyboxRotationSpeed},
{"skyboxRotation", environment.skyboxRotation},
};
for (const auto& objectPtr : scene.GetObjects()) {
if (!objectPtr || objectPtr->IsBeingDestroyed()) {
@@ -573,6 +582,23 @@ bool SceneSerializer::ConstructScene(Scene& scene, LoadResult& result,
scene.m_name = root.at("name").get<std::string>();
}
scene.m_CurrentCameraId = root.value("currentCamera", InvalidObjectId);
scene.m_Environment = SceneEnvironment{};
if (root.contains("environment") && root.at("environment").is_object()) {
const auto& data = root.at("environment");
SceneEnvironment& environment = scene.m_Environment;
const auto readColor = [&data](const char* key, glm::vec3& color) {
if (data.contains(key) && data.at(key).is_array() && data.at(key).size() == 3) {
const auto& value = data.at(key);
color = {value.at(0).get<float>(), value.at(1).get<float>(), value.at(2).get<float>()};
}
};
readColor("ambientColor", environment.ambientColor);
environment.ambientIntensity = data.value("ambientIntensity", environment.ambientIntensity);
readColor("fogColor", environment.fogColor);
environment.fogDensity = data.value("fogDensity", environment.fogDensity);
environment.skyboxRotationSpeed = data.value("skyboxRotationSpeed", environment.skyboxRotationSpeed);
environment.skyboxRotation = data.value("skyboxRotation", environment.skyboxRotation);
}
if (progressCallback) progressCallback(0.9f);