From 2e0e840a911f66221c9346d7be7b7341f6ee5e0d Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Sun, 1 Sep 2024 03:36:01 +0200 Subject: [PATCH] adspartan : noggit: ui: settings: unify render distance and far z settings https://github.com/wowdev/noggit3/commit/aedf0f1bd32c32d71160251415db92f827e3e9b3 noggit: ui: settings: add fov https://github.com/wowdev/noggit3/commit/5fb49d724226f74c19953cfc623997aece1d07d3 --- src/noggit/Camera.cpp | 11 +++++++++++ src/noggit/Camera.hpp | 1 + src/noggit/MapHeaders.h | 2 ++ src/noggit/MapTile.cpp | 2 +- src/noggit/MapView.cpp | 7 +++++-- src/noggit/rendering/WorldRender.cpp | 2 +- src/noggit/ui/tools/PresetEditor/ModelView.cpp | 2 +- .../ui/tools/PreviewRenderer/PreviewRenderer.cpp | 2 +- .../ui/windows/settingsPanel/SettingsPanel.cpp | 8 ++++---- .../ui/windows/settingsPanel/SettingsPanel.ui | 16 +++++++++++----- 10 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/noggit/Camera.cpp b/src/noggit/Camera.cpp index a3dab263..75c9e3a2 100755 --- a/src/noggit/Camera.cpp +++ b/src/noggit/Camera.cpp @@ -1,5 +1,6 @@ #include #include +#include namespace Noggit { @@ -17,6 +18,9 @@ namespace Noggit //! \note ensure ranges yaw (yaw_); pitch (pitch_); + + QSettings settings; + _fov = math::degrees(settings.value("fov", 54.f).toFloat()); } math::degrees Camera::yaw() const @@ -64,6 +68,13 @@ namespace Noggit return _fov; } + math::degrees Camera::fov(math::degrees value) + { + _fov = math::degrees(std::max(10.f, std::min(90.f, value._))); + + return _fov; + } + glm::vec3 Camera::look_at() const { return position + direction(); diff --git a/src/noggit/Camera.hpp b/src/noggit/Camera.hpp index 00a04f2e..ee1ed7c9 100755 --- a/src/noggit/Camera.hpp +++ b/src/noggit/Camera.hpp @@ -24,6 +24,7 @@ namespace Noggit void add_to_pitch (math::degrees); math::radians fov() const; + math::degrees fov(math::degrees); glm::vec3 look_at() const; glm::vec3 direction() const; diff --git a/src/noggit/MapHeaders.h b/src/noggit/MapHeaders.h index 1fa42dd2..592b80df 100755 --- a/src/noggit/MapHeaders.h +++ b/src/noggit/MapHeaders.h @@ -59,6 +59,8 @@ inline constexpr float UNITSIZE = (CHUNKSIZE / 8.0f); inline constexpr float MINICHUNKSIZE = (CHUNKSIZE / 4.0f); inline constexpr float TEXDETAILSIZE = (CHUNKSIZE / 64.0f); inline constexpr float ZEROPOINT = (32.0f * (TILESIZE)); + +static constexpr double TILE_RADIUS = 754.24723326565069269423398624517; //sqrt(2 * (533.33333)^2) inline constexpr double MAPCHUNK_RADIUS = 47.140452079103168293389624140323; //sqrt((533.33333/16)^2 + (533.33333/16)^2) struct MHDR diff --git a/src/noggit/MapTile.cpp b/src/noggit/MapTile.cpp index 256b20ca..d363ded3 100755 --- a/src/noggit/MapTile.cpp +++ b/src/noggit/MapTile.cpp @@ -433,7 +433,7 @@ void MapTile::convert_alphamap(bool to_big_alpha) } -bool MapTile::intersect (math::ray const& ray, selection_result* results) const +bool MapTile::intersect (math::ray const& ray, selection_result* results) { if (!finished) { diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 00edb2c6..a412b9f3 100755 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -4896,7 +4896,7 @@ glm::mat4x4 MapView::model_view(bool use_debug_cam) const glm::mat4x4 MapView::projection() const { - float far_z = _settings->value("farZ", 2048).toFloat(); + float far_z = _settings->value("view_distance", 2000.f).toFloat() + 1.f; if (_display_mode == display_mode::in_2D) { @@ -6072,12 +6072,15 @@ void MapView::onSettingsSave() _world->renderer()->markTerrainParamsUniformBlockDirty(); - _world->renderer()->setViewDistance(_settings->value("view_distance", 1000.f).toFloat()); + _world->renderer()->setViewDistance(_settings->value("view_distance", 2000.f).toFloat()); _world.get()->mapIndex.setLoadingRadius(_settings->value("loading_radius", 2).toInt()); _world.get()->mapIndex.setUnloadDistance(_settings->value("unload_dist", 5).toInt()); _world.get()->mapIndex.setUnloadInterval(_settings->value("unload_interval", 30).toInt()); + _camera.fov(math::degrees(_settings->value("fov", 54.f).toFloat())); + _debug_cam.fov(math::degrees(_settings->value("fov", 54.f).toFloat())); + } void MapView::ShowContextMenu(QPoint pos) diff --git a/src/noggit/rendering/WorldRender.cpp b/src/noggit/rendering/WorldRender.cpp index 0b6a8b4e..0b46db2f 100755 --- a/src/noggit/rendering/WorldRender.cpp +++ b/src/noggit/rendering/WorldRender.cpp @@ -18,7 +18,7 @@ WorldRender::WorldRender(World* world) : BaseRender() , _world(world) , _liquid_texture_manager(world->_context) -, _view_distance(world->_settings->value("view_distance", 1000.f).toFloat()) +, _view_distance(world->_settings->value("view_distance", 2000.f).toFloat()) // + TILE_RADIUS) // add adt radius to make sure tiles aren't culled too soon, todo: improve adt culling to prevent that from happening , _cull_distance(0.f) { } diff --git a/src/noggit/ui/tools/PresetEditor/ModelView.cpp b/src/noggit/ui/tools/PresetEditor/ModelView.cpp index 989b22c8..22731f84 100755 --- a/src/noggit/ui/tools/PresetEditor/ModelView.cpp +++ b/src/noggit/ui/tools/PresetEditor/ModelView.cpp @@ -133,7 +133,7 @@ glm::mat4x4 ModelViewer::world_model_view() const glm::mat4x4 ModelViewer::world_projection() const { - float far_z = _settings->value("farZ", 2048).toFloat(); + float far_z = _settings->value("view_distance", 2000.f).toFloat(); return glm::perspective(_camera.fov()._, aspect_ratio(), 1.f, far_z); } diff --git a/src/noggit/ui/tools/PreviewRenderer/PreviewRenderer.cpp b/src/noggit/ui/tools/PreviewRenderer/PreviewRenderer.cpp index efa53a19..df290b45 100755 --- a/src/noggit/ui/tools/PreviewRenderer/PreviewRenderer.cpp +++ b/src/noggit/ui/tools/PreviewRenderer/PreviewRenderer.cpp @@ -371,7 +371,7 @@ glm::mat4x4 PreviewRenderer::model_view() const glm::mat4x4 PreviewRenderer::projection() const { - float far_z = _settings->value("farZ", 2048).toFloat(); + float far_z = _settings->value("view_distance", 2000.f).toFloat(); return glm::perspective(_camera.fov()._, aspect_ratio(), 1.f, far_z); } diff --git a/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp b/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp index 2ae2ef66..10626faf 100755 --- a/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp +++ b/src/noggit/ui/windows/settingsPanel/SettingsPanel.cpp @@ -197,8 +197,8 @@ namespace Noggit { ui->importPathField->setText(_settings->value("project/import_file", "import.txt").toString()); ui->wmvLogPathField->setText(_settings->value("project/wmv_log_file").toString()); - ui->viewDistanceField->setValue(_settings->value("view_distance", 1000.f).toFloat()); - ui->farZField->setValue(_settings->value("farZ", 2048.f).toFloat()); + ui->_view_distance->setValue(_settings->value("view_distance", 2000.f).toFloat()); + ui->_fov->setValue(_settings->value("fov", 54.f).toFloat()); ui->_undock_tool_properties->setChecked( _settings->value("undock_tool_properties/enabled", true).toBool()); ui->_undock_small_texture_palette->setChecked( @@ -286,8 +286,8 @@ namespace Noggit { _settings->setValue("project/import_file", ui->importPathField->text()); _settings->setValue("project/wmv_log_file", ui->wmvLogPathField->text()); - _settings->setValue("farZ", ui->farZField->value()); - _settings->setValue("view_distance", ui->viewDistanceField->value()); + _settings->setValue("view_distance", ui->_view_distance->value()); + _settings->setValue("fov", ui->_fov->value()); _settings->setValue("undock_tool_properties/enabled", ui->_undock_tool_properties->isChecked()); _settings->setValue("undock_small_texture_palette/enabled", ui->_undock_small_texture_palette->isChecked()); diff --git a/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui b/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui index b4db2ca1..b28a790d 100755 --- a/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui +++ b/src/noggit/ui/windows/settingsPanel/SettingsPanel.ui @@ -344,10 +344,13 @@ - + 1048576.000000000000000 + + 100.000000000000000 + 2000.000000000000000 @@ -360,7 +363,7 @@ - FarZ + Field Of View (FOV) @@ -378,12 +381,15 @@ - + + + 10.000000000000000 + - 1048576.000000000000000 + 90.000000000000000 - 2048.000000000000000 + 54.000000000000000