载入中...
搜索中...
未找到
AgentState.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4#include <glm/glm.hpp>
5#include <glm/gtc/quaternion.hpp>
6
7#include <cstdint>
8
9namespace eve::gpuagents {
10
13 glm::vec3 position{0.f};
14 glm::vec3 velocity{0.f};
15 glm::quat rotation{1.f, 0.f, 0.f, 0.f};
16 float age = 0.f;
17 float customData[4]{0.f, 0.f, 0.f, 0.f};
18 std::uint32_t alive = 0;
19};
20
22enum class EffectKind : std::uint32_t {
23 Fish = 0,
24 LifeNetwork = 1,
25 Bird = 2,
26 Petal = 3,
27};
28
30inline glm::mat3 rotationMatrix(const glm::quat& q) {
32 return glm::mat3_cast(q);
33}
34
36inline glm::quat lookRotation(const glm::vec3& forward, const glm::vec3& upHint = glm::vec3(0.f, 1.f, 0.f)) {
37 const glm::vec3 f = glm::normalize(forward);
38 glm::vec3 u = upHint;
39 if (glm::length(glm::cross(f, u)) < 1e-4f) {
40 u = glm::abs(f.y) < 0.99f ? glm::vec3(0.f, 1.f, 0.f) : glm::vec3(1.f, 0.f, 0.f);
41 }
42 const glm::vec3 r = glm::normalize(glm::cross(u, f));
43 u = glm::cross(f, r);
45 return glm::normalize(glm::quat_cast(glm::mat3(r, u, f)));
46}
47
48} // namespace eve::gpuagents
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t alive
float u
Definition Grass.cpp:233
std::array< double, 10 > q
double r
std::array< float, 4 > rotation
std::array< float, 3 > position
float f
std::vector< TileLayer::Tileset::CustomData > customData
glm::quat lookRotation(const glm::vec3 &forward, const glm::vec3 &upHint=glm::vec3(0.f, 1.f, 0.f))
Builds a facing quaternion from a unit forward and approximate up.
Definition AgentState.h:36
glm::mat3 rotationMatrix(const glm::quat &q)
Converts a quaternion to a 3x3 rotation matrix (column-major).
Definition AgentState.h:30
EffectKind
Effect kind selecting the solver kernel.
Definition AgentState.h:22
Standardized per-agent simulation output shared by all effect kinds.
Definition AgentState.h:12