载入中...
搜索中...
未找到
MotionEchoEffect.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
7
8#include <glm/mat4x4.hpp>
9#include <glm/vec3.hpp>
10
11#include <cstddef>
12#include <cstdint>
13#include <vector>
14
15namespace eve::stylize {
16
19 float sampleIntervalSeconds = 1.f / 60.f;
20 float sampleLifetimeSeconds = 0.35f;
21 float minimumDistance = 0.01f;
22 float widthHead = 0.12f;
23 float widthTail = 0.f;
24 std::size_t maximumSamples = 128;
25};
26
29 std::uint32_t captured = 0;
30 std::uint32_t expired = 0;
31 std::uint32_t distanceRejected = 0;
32 std::uint32_t alive = 0;
33};
34
42public:
44 explicit ProjectileTrailEffect(ProjectileTrailConfig config = {});
45
47 void reset() noexcept;
48
55 [[nodiscard]] MotionEchoAdvanceReport update(float deltaSeconds,
56 const glm::vec3& currentPosition);
57
59 [[nodiscard]] TrailMeshSnapshot build(const glm::vec3& cameraForward) const;
60
62 [[nodiscard]] std::size_t size() const noexcept { return samples_.size(); }
63
64private:
65 struct Sample {
66 glm::vec3 position{0.f};
67 float age = 0.f;
68 };
69
70 bool append(const glm::vec3& position, float initialAge,
71 MotionEchoAdvanceReport& report);
72
73 ProjectileTrailConfig config_;
74 std::vector<Sample> samples_;
75 glm::vec3 previousInput_{0.f};
76 float sampleAccumulator_ = 0.f;
77 bool hasPreviousInput_ = false;
78};
79
82 float sampleIntervalSeconds = 0.06f;
83 float lifetimeSeconds = 0.3f;
84 std::size_t maximumImages = 12;
85 graphics::Color colorStart{0.4f, 0.8f, 1.f, 0.65f};
86 graphics::Color colorEnd{0.1f, 0.2f, 1.f, 0.f};
87};
88
96public:
98 explicit AfterimageEffect(AfterimageEffectConfig config = {});
99
101 void reset() noexcept;
102
109 [[nodiscard]] MotionEchoAdvanceReport update(float deltaSeconds,
110 const glm::mat4& currentModel);
111
113 [[nodiscard]] std::vector<MeshParticleInstance> snapshot() const;
114
116 [[nodiscard]] std::size_t size() const noexcept { return images_.size(); }
117
118private:
119 struct Image {
120 std::uint64_t stableId = 0;
121 glm::mat4 model{1.f};
122 float age = 0.f;
123 };
124
125 AfterimageEffectConfig config_;
126 std::vector<Image> images_;
127 float sampleAccumulator_ = 0.f;
128 std::uint64_t nextStableId_ = 1;
129};
130
131} // namespace eve::stylize
#define EVENGINE_API_WORLD
Definition Export.h:109
std::array< float, 3 > position
glm::mat4 model
Fixed-rate owning transform history emitted as mesh-particle instances.
std::size_t size() const noexcept
Return retained image count.
Time-resampled world-space trail for projectiles and dash effects.
std::size_t size() const noexcept
Return retained sample count.
eve::Color Color
RGBA color used by every graphics draw call. Lives inside eve::graphics so including a graphics heade...
Definition Color.h:13
Fixed-rate model snapshot and fade controls for character afterimages.
Per-call observable sample and expiration counters.
Sampling, retention and ribbon appearance for a projectile trail.
Owning CPU snapshot suitable for upload by a graphics adapter.
Definition TrailEffect.h:42