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

[#69] add water and space particle

just change the fkn shader in the main dumb ass
parent fe0a4422
Branches
Tags
1 merge request!56Resolve "Partikelsystem"
Pipeline #26048 passed
Showing
with 116 additions and 5 deletions
No preview for this file type
File added
File added
%VULKAN_SDK%\Bin32\glslc.exe shader.vert -o vert.spv %VULKAN_SDK%\Bin32\glslc.exe shader.vert -o vert.spv
%VULKAN_SDK%\Bin32\glslc.exe shader.frag -o frag.spv %VULKAN_SDK%\Bin32\glslc.exe shader_water.frag -o frag_water.spv
%VULKAN_SDK%\Bin32\glslc.exe shader1.comp -o comp1.spv %VULKAN_SDK%\Bin32\glslc.exe shader_water.comp -o comp_water.spv
%VULKAN_SDK%\Bin32\glslc.exe shader_space.frag -o frag_space.spv
%VULKAN_SDK%\Bin32\glslc.exe shader_space.comp -o comp_space.spv
pause pause
\ No newline at end of file
No preview for this file type
File added
File added
...@@ -68,6 +68,6 @@ void main() { ...@@ -68,6 +68,6 @@ void main() {
pos += normalize(vel) * deltaTime; pos += normalize(vel) * deltaTime;
inParticle[id].position = pos; inParticle[id].position = pos;
float rand1 = rand;
inParticle[id].velocity = vel; inParticle[id].velocity = vel;
} }
#version 450 core
#extension GL_ARB_separate_shader_objects : enable
layout(local_size_x = 256) in;
struct Particle
{
vec3 position;
float lifeTime;
vec3 velocity;
float padding_2;
vec3 reset_velocity;
float padding_3;
};
layout(std430, binding = 0) coherent buffer buffer_inParticle
{
Particle inParticle[];
};
layout( push_constant ) uniform constants{
float deltaTime;
float rand;
};
vec3 attraction(vec3 pos, vec3 attractPos)
{
vec3 delta = attractPos - pos;
const float damp = 0.5;
float dDampedDot = dot(delta, delta) + damp;
float invDist = 1.0f / sqrt(dDampedDot);
float invDistCubed = invDist*invDist*invDist;
return delta * invDistCubed * 0.0035;
}
vec3 repulsion(vec3 pos, vec3 attractPos)
{
vec3 delta = attractPos - pos;
float targetDistance = sqrt(dot(delta, delta));
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.5, 0.5, 0));
void main() {
uint id = gl_GlobalInvocationID.x;
inParticle[id].lifeTime -= deltaTime;
vec3 pos = inParticle[id].position;
vec3 vel = inParticle[id].velocity;
if(inParticle[id].lifeTime < 0.f)
{
inParticle[id].lifeTime = 7.f;
pos = vec3(0);
vel = inParticle[id].reset_velocity;
inParticle[id].velocity = inParticle[id].reset_velocity;
}
// 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);
}
//vec3 delta = respawnPos - pos;
//float targetDistane = sqrt(dot(delta,delta));
//vel += repulsion(pos, respawnPos);
//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))
vel = (-vel * 0.01);
if((pos.y <= -1.0) || (pos.y > 1.0)){
vel = reflect(vel, vec3(0,1,0));
}
pos += normalize(vel) * deltaTime;
inParticle[id].position = pos;
float weight = 1.0;
float rand1 = rand;
inParticle[id].velocity = vel;
}
#version 450
#extension GL_ARB_separate_shader_objects : enable
layout(location = 1) in vec3 passVelocity;
layout(location = 2) in float passlifeTime;
layout(location = 0) out vec4 outColor;
layout(set=0, binding=0) uniform uColor {
vec4 color;
} Color;
layout(set=0,binding=1) uniform uPosition{
vec2 position;
} Position;
void main()
{
float normlt = 1-normalize(passlifeTime);
vec2 mouse = vec2(Position.position.x, Position.position.y);
outColor =float(passlifeTime < 1) * vec4(0.2,0.5,1,0) +
float(passlifeTime < 2 && passlifeTime > 1) * vec4(0.3, 0.7,1,0) +
float(passlifeTime >= 2 && passlifeTime < 4.f) * vec4(0.5,0.9,1,0) +
float(passlifeTime >= 4.f) * vec4(0.9,1,1,0);
}
...@@ -57,7 +57,7 @@ int main(int argc, const char **argv) { ...@@ -57,7 +57,7 @@ int main(int argc, const char **argv) {
} }
vkcv::ShaderProgram computeShaderProgram{}; vkcv::ShaderProgram computeShaderProgram{};
computeShaderProgram.addShader(vkcv::ShaderStage::COMPUTE, std::filesystem::path("shaders/comp1.spv")); computeShaderProgram.addShader(vkcv::ShaderStage::COMPUTE, std::filesystem::path("shaders/comp_space.spv"));
vkcv::DescriptorSetHandle computeDescriptorSet = core.createDescriptorSet(computeShaderProgram.getReflectedDescriptors()[0]); vkcv::DescriptorSetHandle computeDescriptorSet = core.createDescriptorSet(computeShaderProgram.getReflectedDescriptors()[0]);
...@@ -71,7 +71,7 @@ int main(int argc, const char **argv) { ...@@ -71,7 +71,7 @@ int main(int argc, const char **argv) {
vkcv::ShaderProgram particleShaderProgram{}; vkcv::ShaderProgram particleShaderProgram{};
particleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv")); particleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
particleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv")); particleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag_space.spv"));
vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet( vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(
particleShaderProgram.getReflectedDescriptors()[0]); particleShaderProgram.getReflectedDescriptors()[0]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment