Vulkan Schnee 0.0.1 (22840dc8)
High-performance rendering engine
Loading...
Searching...
No Matches
WindField.h
1#pragma once
2
3#include <cstdint>
4#include <glm/vec3.hpp>
5
13
15{
25 {
26 bool enabled = true;
27
28 float cellSize = 62.0f;
29 float pocketDensity = 0.65f;
30 float radiusScale = 1.0f;
31 float windSpeed = 9.0f;
32
35 float regionalBiasStrength = 0.35f;
36 float coneHalfAngleRadians = 0.78539816339f;
37
38 float verticalRadius = 28.0f;
39 float verticalWindSpeed = 4.5f;
40 float verticalWindBias = 0.12f;
41 float visualizationRadius = 140.0f;
42
43 float windAccelerationScale = 0.45f;
44 float maxWindAddedSpeed = 10.0f;
45 float windDiminishingSpeed = 6.0f;
46 float headwindPenaltyScale = 0.5f;
47
48 bool debugDraw = true;
49 bool debugDrawBorders = true;
50 bool debugDrawArrows = true;
51 float debugArrowSpacing = 9.0f;
52 float debugArrowScale = 0.28f;
53 };
54
62 {
63 glm::vec3 velocity{ 0.0f };
64 float strength = 0.0f;
65 uint32_t pocketId = 0u;
66 bool isInsidePocket = false;
67 };
68
76 {
77 public:
89 [[nodiscard]] WindSample sample( const glm::vec3 & worldPos, float timeSeconds ) const;
90
94 [[nodiscard]] const WindFieldConfig & getConfig() const
95 {
96 return config_;
97 }
98
104 [[nodiscard]] WindFieldConfig & getConfig()
105 {
106 return config_;
107 }
108
113 void setConfig( const WindFieldConfig & config )
114 {
115 config_ = config;
116 }
117
127 void drawDebugAround( const glm::vec3 & center, float timeSeconds ) const;
128
129 private:
131 };
132} // namespace Engine::World
Procedural wind field used by glider flight, particles, and debug rendering.
Definition WindField.h:76
const WindFieldConfig & getConfig() const
Returns the current wind field configuration.
Definition WindField.h:94
WindSample sample(const glm::vec3 &worldPos, float timeSeconds) const
Samples the strongest wind pocket affecting a world-space point.
void drawDebugAround(const glm::vec3 &center, float timeSeconds) const
Draws debug visualization for wind pockets near a world-space center.
WindFieldConfig config_
Active runtime wind configuration.
Definition WindField.h:130
void setConfig(const WindFieldConfig &config)
Replaces the wind field configuration.
Definition WindField.h:113
WindFieldConfig & getConfig()
Returns a mutable wind field configuration.
Definition WindField.h:104
Runtime configuration for procedural wind pockets.
Definition WindField.h:25
float cellSize
Horizontal cell size used to place deterministic wind pockets.
Definition WindField.h:28
float verticalRadius
Half-height of each wind pocket.
Definition WindField.h:38
float verticalWindBias
Bias added to per-pocket vertical noise before clamping to [0, 1].
Definition WindField.h:40
float globalDirectionRotationSpeed
Time-based rotation speed for the base direction, in radians per second.
Definition WindField.h:34
float verticalWindSpeed
Peak upward wind speed at full sample strength.
Definition WindField.h:39
float globalDirectionRadians
Base horizontal wind direction angle in radians.
Definition WindField.h:33
bool debugDrawBorders
Draws pocket radius rings and vertical extents when true.
Definition WindField.h:49
float windSpeed
Peak horizontal wind speed at full sample strength.
Definition WindField.h:31
float pocketDensity
Probability in [0, 1] that a cell contains a wind pocket.
Definition WindField.h:29
float regionalBiasStrength
Regional noise influence on horizontal wind direction.
Definition WindField.h:35
float headwindPenaltyScale
Scale applied when wind opposes glider travel direction.
Definition WindField.h:46
float windAccelerationScale
Glider acceleration multiplier applied to wind contribution.
Definition WindField.h:43
float maxWindAddedSpeed
Maximum glider speed increase contributed by wind.
Definition WindField.h:44
float debugArrowSpacing
Spacing between sampled debug arrows inside a pocket.
Definition WindField.h:51
float radiusScale
Multiplier applied to generated horizontal pocket radii.
Definition WindField.h:30
bool debugDraw
Enables all wind debug drawing when true.
Definition WindField.h:48
bool enabled
Enables sampling and debug drawing when true.
Definition WindField.h:26
float windDiminishingSpeed
Speed where wind contribution starts diminishing for glider flight.
Definition WindField.h:45
float visualizationRadius
Radius around the debug center scanned by drawDebugAround().
Definition WindField.h:41
float debugArrowScale
Scale applied to debug arrow lengths.
Definition WindField.h:52
bool debugDrawArrows
Draws wind direction and velocity arrows when true.
Definition WindField.h:50
float coneHalfAngleRadians
Per-pocket random angular spread around the regional direction.
Definition WindField.h:36
Wind field result at one world-space point.
Definition WindField.h:62
bool isInsidePocket
True when the point is inside a generated wind pocket.
Definition WindField.h:66
float strength
Falloff factor in [0, 1] for the selected pocket.
Definition WindField.h:64
glm::vec3 velocity
Wind velocity at the sample point.
Definition WindField.h:63
uint32_t pocketId
Deterministic identifier for the selected pocket.
Definition WindField.h:65