载入中...
搜索中...
未找到
VegetationWind.cpp
浏览该文件的文档.
7bool finite(glm::dvec3 value) { return std::isfinite(value.x) && std::isfinite(value.y) && std::isfinite(value.z); }
10 return finite(value) && std::abs(value.x) <= limit && std::abs(value.y) <= limit && std::abs(value.z) <= limit;
13 return finite(state.direction) && std::isfinite(state.strength) && state.strength >= 0 && state.strength <= 1.2F &&
14 std::isfinite(state.phase) && state.phase >= 0 && std::isfinite(state.updatePhase) && state.updatePhase >= 0;
18Result<std::array<float, 14>> packVegetationWind(const VegetationWindState& state, const VegetationWindProfile& profile,
21 !std::isfinite(profile.maximumDistance) || profile.maximumDistance <= 0 || !std::isfinite(seconds))
28 {state.direction.x, state.direction.y, state.direction.z, state.strength, state.phase, distance, profile.flex.x,
32Result<void> initializeVegetationWind(VegetationWindState& state, glm::vec3 forward, float strength) {
48Result<void> advanceVegetationWind(VegetationWindState& state, glm::vec3 forward, float strength, float dt) {
49 if (!valid(state) || !finite(forward) || !std::isfinite(strength) || !std::isfinite(dt) || dt < 0)
55 forward.x, -std::max(double(forward.y), std::hypot(double(forward.x), double(forward.z)) * 0.5), forward.z};
58 double(state.strength) + (std::clamp(double(strength), 0.0, double(1.2F)) - state.strength) * alpha;
68Result<void> advanceVegetationWindAudio(VegetationWindAudioState& state, float windStrength, float transitionTime,
97Result<glm::vec3> evaluateVegetationWind(const VegetationWindInput& in, const VegetationWindState& state) {
98 if (!valid(state) || !finite(in.position) || !finite(in.worldOffset) || !finite(in.cameraPosition) ||
99 !finite(in.flex) || !finite(in.frequency) || !std::isfinite(in.widthHeight.x) || in.widthHeight.x <= 0 ||
100 !std::isfinite(in.widthHeight.y) || in.widthHeight.y <= 0 || !std::isfinite(in.maximumDistance) ||
101 in.maximumDistance <= 0 || !std::isfinite(in.sinTimeQuarter) || std::abs(in.sinTimeQuarter) > 1 ||
118 const auto distance = (glm::dvec3(in.worldOffset) - glm::dvec3(in.cameraPosition)) / double(in.maximumDistance);
123 glm::dvec3 flex = glm::dvec3(in.flex) * glm::dvec3(saturate(main * 3), saturate(main * 2), 1 - main * main * 0.5) *
126 const double length = glm::length(up), scale = std::max(length, 0.4), upDot = saturate(up.y / length);
128 glm::mix(glm::dvec2(double(in.widthHeight.y) * 2), glm::dvec2(in.widthHeight), upDot * upDot) * scale;
135 const double branch = norm.x * norm.x + norm.z * norm.z, stem = norm.y, lengthA = glm::dot(local, local);
137 ((std::sin(time + frequency.x * (double(in.worldOffset.x) + in.worldOffset.y + in.worldOffset.z)) * 0.3 +
142 glm::dvec3 tally{direction.x * stem * stem * gust * flex.x, 0, direction.z * stem * stem * gust * flex.x};
147 (std::sin(time * 2 + (displaced.x + displaced.y + displaced.z) * frequency.y) * branch * 0.7 + 0.3) *
157 glm::dvec3 wave{std::sin(time * 5 + offsets.x), std::sin(time * 5 + offsets.y), std::sin(time * 5 + offsets.z)};
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
Result< std::array< float, 14 > > packVegetationWind(const VegetationWindState &state, const VegetationWindProfile &profile, double seconds)
Pack a wind snapshot into the grass shader's final 14 float slots.
Definition VegetationWind.cpp:18
Result< void > advanceVegetationWind(VegetationWindState &state, glm::vec3 forward, float strength, float dt)
Advance source WindManager smoothing and phase using explicit nonnegative dt. Direction Y follows -ma...
Definition VegetationWind.cpp:48
Result< void > initializeVegetationWind(VegetationWindState &state, glm::vec3 forward, float strength)
Apply Pcg WindManager.InstantWindApply semantics without smoothing.
Definition VegetationWind.cpp:32
Result< glm::vec3 > evaluateVegetationWind(const VegetationWindInput &in, const VegetationWindState &state)
Evaluate the source main/branch/leaf deformation for one vertex without mutation. Requires finite inp...
Definition VegetationWind.cpp:97
Result< void > advanceVegetationWindAudio(VegetationWindAudioState &state, float windStrength, float transitionTime, float dt, bool enabled, bool clipAvailable)
Advance Pcg WindManager CheckWindVolume and ProcessWindAudio as a pure state transition.
Definition VegetationWind.cpp:68
@ InvalidArgument
Caller-owned state for Pcg WindManager's looping wind-audio volume controller.
Definition VegetationWind.h:17
Explicit source PW_GeneralWind inputs in object/world coordinates.
Definition VegetationWind.h:63
glm::mat3 objectToWorld
Definition VegetationWind.h:65
glm::vec3 cameraPosition
Definition VegetationWind.h:64
float maximumDistance
Definition VegetationWind.h:68
float sinTimeQuarter
Inject Unity-equivalent sin(time/4) and sin(time) values.
Definition VegetationWind.h:70
Caller-owned material wind controls; billboard suppresses source branch and leaf motion....
Definition VegetationWind.h:46
float maximumDistance
Definition VegetationWind.h:48
Caller-owned wind globals; no hidden clock, singleton or retained scene link.
Definition VegetationWind.h:7