Skip to content
Snippets Groups Projects
Commit fe0a4422 authored by Sebastian Gaida's avatar Sebastian Gaida
Browse files

[#69] change particle physics

parent 2d433de8
No related branches found
No related tags found
1 merge request!56Resolve "Partikelsystem"
No preview for this file type
No preview for this file type
......@@ -17,10 +17,8 @@ layout(set=0,binding=1) uniform uPosition{
void main()
{
vec2 mouse = vec2(Position.position.x, Position.position.y);
outColor = float(distance(gl_FragCoord.xy, vec2(400,300)) <= 30) * vec4(1,1,1,0) +
float(distance(gl_FragCoord.xy, vec2(400,300)) > 30) *
(float(passlifeTime < 1) * vec4(1,1,0,0) +
outColor = float(passlifeTime < 1) * vec4(1,1,0,0) +
float(passlifeTime < 2 && passlifeTime > 1) * vec4(1,passlifeTime * 0.5,0,0) +
float(passlifeTime >= 2 && passlifeTime < 2.5f) * vec4(passlifeTime * 0.5,passlifeTime * 0.5,0,0) +
float(passlifeTime >= 2.5f) * vec4(1,0,0,0));
float(passlifeTime >= 2.5f) * vec4(1,0,0,0);
}
\ No newline at end of file
......@@ -9,6 +9,8 @@ struct Particle
float lifeTime;
vec3 velocity;
float padding_2;
vec3 reset_velocity;
float padding_3;
};
layout(std430, binding = 0) coherent buffer buffer_inParticle
......@@ -38,10 +40,11 @@ vec3 repulsion(vec3 pos, vec3 attractPos)
return delta * (1.0 / (targetDistance * targetDistance * targetDistance)) * -0.000035;
}
const int n = 3;
vec3 gravity = vec3(0,-9.8,0);
vec3 gravityPoint[n] = vec3[n](vec3(-0.5, 0.5, 0),vec3(0.5, 0.5, 0),vec3(0, -0.5, 0));
vec3 gravityPoint[n] = vec3[n](vec3(-0.3, .5, -0.6),vec3(-0.2, 0.6, -0.3),vec3(.4, -0.4, 0.6));
//vec3 gravityPoint[n] = vec3[n](vec3(-0.5, 0.5, 0));
void main() {
uint id = gl_GlobalInvocationID.x;
inParticle[id].lifeTime -= deltaTime;
......@@ -49,24 +52,19 @@ void main() {
vec3 vel = inParticle[id].velocity;
if(inParticle[id].lifeTime < 0.f)
{
inParticle[id].lifeTime = 3.f;
inParticle[id].lifeTime = 5.f;
pos = vec3(0);
}
// inParticle[id].position += deltaTime * -normalize(max(2 - distance(inParticle[id].position,respawnPos),0.0) * respawnPos - inParticle[id].position);
// inParticle[id].position += deltaTime * -normalize(max(2 - distance(inParticle[id].position,respawnPos),0.0) * respawnPos - inParticle[id].position);
for(int i = 0; i < n; i++)
{
vel += deltaTime * deltaTime * deltaTime * normalize(max(2 - distance(pos,gravityPoint[i]),0.1) * gravityPoint[i] - pos);
vel += deltaTime * deltaTime * normalize(max(2 - distance(pos,gravityPoint[i]),0.1) * gravityPoint[i] - pos);
}
// vec3 delta = respawnPos - pos;
// float targetDistane = sqrt(dot(delta,delta));
// vel += repulsion(pos, respawnPos) * 0.05;
//if((pos.x < -1.0) || (pos.x > 1.0) || (pos.y < -1.0) || (pos.y > 1.0)|| (pos.z < -1.0) || (pos.z > 1.0))
if((pos.x < -1.0) || (pos.x > 1.0))
if((pos.x <= -2.0) || (pos.x > 2.0) || (pos.y <= -2.0) || (pos.y > 2.0)|| (pos.z <= -2.0) || (pos.z > 2.0)){
vel = (-vel * 0.1);
}
pos += normalize(vel) * deltaTime;
inParticle[id].position = pos;
......
......@@ -202,7 +202,8 @@ int main(int argc, const char **argv) {
cameraManager.getCamera(camIndex1).setPosition(glm::vec3(0.0f, 0.0f, -2.0f));
cameraManager.getCamera(camIndex1).setCenter(glm::vec3(0.0f, 0.0f, 0.0f));
srand((unsigned)time(NULL));
std::uniform_real_distribution<float> rdm = std::uniform_real_distribution<float>(0.95f, 1.05f);
std::default_random_engine rdmEngine;
while (window.isWindowOpen()) {
window.pollEvents();
......@@ -225,8 +226,7 @@ int main(int argc, const char **argv) {
mvp.push_back( cameraManager.getCamera(1).getMVP());
auto cmdStream = core.createCommandStream(vkcv::QueueType::Graphics);
float random = static_cast<float> (rand()) / (static_cast<float> (RAND_MAX/2.5f));
std::cout << random << std::endl;
float random = rdm(rdmEngine);
glm::vec2 pushData = glm::vec2(deltatime, random);
vkcv::PushConstantData pushConstantDataCompute( &pushData, sizeof(glm::vec2));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment