PeriDyno 1.0.0
Loading...
Searching...
No Matches
ParticleEmitter.h
Go to the documentation of this file.
1
16#pragma once
18
19namespace dyno
20{
25 class ParticleEmitter : public ParametricModel<DataType3f>
26 {
27 public:
30
31 uint sizeOfParticles() { return mPosition.size(); }
32
35
36 std::string getNodeType() override;
37
38 public:
39 DEF_VAR(float, VelocityMagnitude, 1.0f, "Emitter Velocity");
40 DEF_VAR(float, SamplingDistance, 0.005f, "Emitter Sampling Distance");
41
42 protected:
43 void updateStates() final;
44
45 virtual void generateParticles();
46
47 inline SquareMatrix<float, 3> rotationMatrix()
48 {
49 auto center = this->varLocation()->getData();
50 auto rot_vec = this->varRotation()->getData();
51
53 float x_rad = rot_vec[0] / 180.0f * M_PI;
54 float y_rad = rot_vec[1] / 180.0f * M_PI;
55 float z_rad = rot_vec[2] / 180.0f * M_PI;
56
57 quat = quat * Quat<float>(x_rad, Vec3f(1, 0, 0));
58 quat = quat * Quat<float>(y_rad, Vec3f(0, 1, 0));
59 quat = quat * Quat<float>(z_rad, Vec3f(0, 0, 1));
60
61 return quat.toMatrix3x3();
62 }
63
64 protected:
67 };
68}
#define M_PI
Definition Typedef.inl:36
DArray< Vec3f > & getPositions()
void updateStates() final
DEF_VAR(float, VelocityMagnitude, 1.0f, "Emitter Velocity")
DArray< Coord > mVelocity
std::string getNodeType() override
DArray< Vec3f > & getVelocities()
virtual ~ParticleEmitter()
virtual void generateParticles()
SquareMatrix< Real, 3 > rotationMatrix()
DArray< Coord > mPosition
DEF_VAR(float, SamplingDistance, 0.005f, "Emitter Sampling Distance")
static DYN_FUNC Quat< Real > identity()
Definition Quat.h:104
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Array< T, DeviceType::GPU > DArray
Definition Array.inl:89
Vector< float, 3 > Vec3f
Definition Vector3D.h:93
unsigned int uint
Definition VkProgram.h:14
vgm::Quat quat
Definition vgMath.h:633