载入中...
搜索中...
未找到
FluidSurfaceBinding.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include <glm/glm.hpp>
6
7#include <cstdint>
8#include <vector>
9
10namespace eve::fluids {
11
14 uint32_t triangle = 0;
15 glm::vec3 barycentric{1.f, 0.f, 0.f};
16};
17
21 glm::vec3 position{0.f};
22 glm::vec3 previousPosition{0.f};
23 glm::vec3 normal{0.f, 1.f, 0.f};
24 glm::vec3 tangent{1.f, 0.f, 0.f};
25 glm::vec3 bitangent{0.f, 0.f, 1.f};
26 glm::vec3 velocity{0.f};
27 glm::vec2 uv{0.f};
28};
29
33 glm::vec3 remainingDisplacement{0.f};
34 bool reachedBoundary = false;
35 bool valid = false;
36};
37
46public:
54 bool build(const std::vector<glm::vec3>& positions, const std::vector<uint32_t>& indices,
55 const std::vector<glm::vec2>& uvs = {});
56
58 void setTransform(const glm::mat4& transform);
59
64 bool setDeformedPositions(const std::vector<glm::vec3>& worldPositions);
65
67 void commitPose();
68
71 bool isValid() const;
72
75 int triangleCount() const;
76
79 int vertexCount() const { return int(currentPositions_.size()); }
80
83 std::vector<glm::uvec3> triangles() const;
84
90 SurfaceSample evaluate(const SurfaceLocation& location, float dt) const;
91
99 bool project(const glm::vec3& worldPosition, float maxDistance, SurfaceLocation& outLocation) const;
100
108 SurfaceWalkResult walkAcrossSurface(const SurfaceLocation& start, const glm::vec3& worldDisplacement,
109 int maxCrossings = 16) const;
110
113 int adjacentTriangle(uint32_t triangle, int oppositeVertex) const;
114
115private:
116 glm::vec3 barycentric(uint32_t triangle, const glm::vec3& point) const;
117 glm::vec3 triangleNormal(uint32_t triangle) const;
118
119 std::vector<glm::vec3> restPositions_;
120 std::vector<glm::vec3> currentPositions_;
121 std::vector<glm::vec3> previousPositions_;
122 std::vector<glm::vec2> uvs_;
123 std::vector<uint32_t> indices_;
124 std::vector<glm::ivec3> adjacency_;
125};
126
127} // namespace eve::fluids
Duration start
#define EVENGINE_API_DOMAINS
Definition Export.h:110
int oppositeVertex
int triangle
std::vector< std::uint32_t > indices
std::vector< float > positions
std::vector< TriangleRef > triangles
glm::vec3 point
Dynamic triangle surface used to bind films and droplets to deforming meshes.
int vertexCount() const
Vertex count.
GLSL compute kernels for the GPU surface-flow solver.
Definition FluidTarget.h:12
Stable material-space address of a point on a triangle surface.
Evaluated world-space frame and motion at a surface location.
Result of walking a material point across triangle adjacency.