diff options
author | jjesswan <90643397+jjesswan@users.noreply.github.com> | 2024-05-10 04:26:01 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-10 04:26:01 -0400 |
commit | 2cff8e109965307a4265f43d01f4c365f09977e7 (patch) | |
tree | 4915de3e338ee965502289f05f12dc07ef3a717f | |
parent | d158de5abe6ddbc8546a7fafd797e9f7c74fe768 (diff) | |
parent | 690670c920549828733fddc12e45bae34271aff4 (diff) |
Merge pull request #5 from Seb-Park/new_parti
texture particles
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | resources/images/particle.png | bin | 0 -> 122878 bytes | |||
-rw-r--r-- | resources/shaders/particles.frag | 6 | ||||
-rw-r--r-- | resources/shaders/particles.vert | 6 | ||||
-rwxr-xr-x | src/glwidget.cpp | 4 | ||||
-rwxr-xr-x | src/glwidget.h | 1 | ||||
-rw-r--r-- | src/particlesystem.cpp | 15 | ||||
-rw-r--r-- | src/particlesystem.h | 17 |
8 files changed, 29 insertions, 22 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c9b446..ad833bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,8 @@ qt6_add_resources(${PROJECT_NAME} "Resources" resources/images/cupertin-lake_ft.png resources/images/halftone.png resources/images/foam3.png + resources/images/particle.png + resources/images/nx.png resources/images/ny.png diff --git a/resources/images/particle.png b/resources/images/particle.png Binary files differnew file mode 100644 index 0000000..68b8ac2 --- /dev/null +++ b/resources/images/particle.png diff --git a/resources/shaders/particles.frag b/resources/shaders/particles.frag index 99373e7..85d9ac2 100644 --- a/resources/shaders/particles.frag +++ b/resources/shaders/particles.frag @@ -4,12 +4,12 @@ in vec4 ParticleColor; out vec4 fragColor; -uniform sampler2D sprite; +uniform sampler2D particle_texture; uniform float alpha; void main() { - // color = (texture(sprite, TexCoords) * ParticleColor); - fragColor = vec4(1,1,1,alpha); + vec4 c = texture(particle_texture, TexCoords); + fragColor = c*vec4(1,1,1,alpha)*1.6; } diff --git a/resources/shaders/particles.vert b/resources/shaders/particles.vert index 7b49a46..6e9e388 100644 --- a/resources/shaders/particles.vert +++ b/resources/shaders/particles.vert @@ -1,5 +1,5 @@ #version 330 core -layout (location = 0) in vec2 pos; // <vec2 position, vec2 texCoords> +layout (location = 0) in vec4 pos; // <vec2 position, vec2 texCoords> out vec2 TexCoords; out vec4 ParticleColor; @@ -13,8 +13,8 @@ uniform float alpha; void main() { float scale = 1.f;//2000.0f; - //TexCoords = vertex.zw; - ParticleColor = color; + TexCoords = vec2(pos.x, pos.w); + //ParticleColor = color; // gl_Position = projection *view* vec4((pos * scale) + vec2(offset), 0.0, 1.0); gl_Position = (vec4(pos.x*alpha, pos.y*alpha, 0, 1) + projection*view*vec4(vec3(offset), 1))*scale; diff --git a/src/glwidget.cpp b/src/glwidget.cpp index f8547a6..cbc6971 100755 --- a/src/glwidget.cpp +++ b/src/glwidget.cpp @@ -104,6 +104,8 @@ void GLWidget::initializeGL() m_halftone_tex = loadTextureFromFile(":resources/images/halftone.png").textureID; m_foam_tex = loadTextureFromFile(":resources/images/foam3.png").textureID; + m_particle_tex = loadTextureFromFile(":resources/images/particle.png").textureID; + m_causticsShader = new Shader(":resources/shaders/caustics.vert", ":resources/shaders/caustics.frag"); @@ -464,7 +466,7 @@ void GLWidget::paintGL() m_skybox.draw(m_skyboxShader, m_camera); - m_particles.draw(m_particleShader, m_camera); + m_particles.draw(m_particleShader, m_camera, m_particle_tex); diff --git a/src/glwidget.h b/src/glwidget.h index 50d6347..ac9b1d0 100755 --- a/src/glwidget.h +++ b/src/glwidget.h @@ -105,6 +105,7 @@ private: // FOAM GLuint m_halftone_tex; GLuint m_foam_tex; + GLuint m_particle_tex; // Timing diff --git a/src/particlesystem.cpp b/src/particlesystem.cpp index 566667f..65d61ac 100644 --- a/src/particlesystem.cpp +++ b/src/particlesystem.cpp @@ -63,7 +63,7 @@ void particlesystem::init(std::vector<OceanSpray> verts){ for (auto v : m_verts){ Particle p; p.pos = Eigen::Vector3f(v.height); - p.life = getRandomInRange(.1,1); + p.life = getRandomInRange(.6,1); // p.vel = v.slope*factor; //p.vel = getRandomInitialVel(); p.vel = getInitVel(v); @@ -80,7 +80,7 @@ void particlesystem::init(std::vector<OceanSpray> verts){ glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, m_vertices.size()*sizeof(float), m_vertices.data(), GL_STATIC_DRAW); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(float), (void*)0); + glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4*sizeof(float), (void*)0); // unbind glEnableVertexAttribArray(0); @@ -103,7 +103,7 @@ void particlesystem::update(double deltaTime){ float dt = deltaTime; // update all particles values for (Particle &p : m_particles){ - p.life -= deltaTime * getRandomInRange(.1f, .5f); + p.life -= deltaTime * getRandomInRange(.1f, .9f); // if particle is still alive, update pos if (p.life >= 0.f){ @@ -157,7 +157,7 @@ void particlesystem::respawn_particle(Particle &p, OceanSpray s){ } -void particlesystem::draw(Shader *shader, Camera m_camera){ +void particlesystem::draw(Shader *shader, Camera m_camera, GLuint texture){ shader->bind(); @@ -165,9 +165,10 @@ void particlesystem::draw(Shader *shader, Camera m_camera){ // activate texture -// glActiveTexture(GL_TEXTURE10); -// glBindTexture(GL_TEXTURE_CUBE_MAP, skybox_tex); -// glUniform1i(glGetUniformLocation(shader->id(), "cubeMap"), 9); // bind texture at slot 9 + glActiveTexture(GL_TEXTURE10); + glBindTexture(GL_TEXTURE_2D, texture); + glUniform1i(glGetUniformLocation(shader->id(), "particle_texture"), 10); + // manually set view and projection, for non-translating view diff --git a/src/particlesystem.h b/src/particlesystem.h index d3b0b8f..608e229 100644 --- a/src/particlesystem.h +++ b/src/particlesystem.h @@ -29,8 +29,7 @@ public: particlesystem(); void update(double deltaTime); - void draw(Shader *skybox_shader, Camera m_camera); - void draw(Shader *shader, Camera m_camera, std::vector<Eigen::Vector3f> verts, Eigen::Matrix4f model); + void draw(Shader *shader, Camera m_camera, GLuint texture); void init(std::vector<OceanSpray> verts); @@ -60,12 +59,14 @@ private: float d = 2.f; std::vector<float> m_vertices = { - -d, d, - d,d, - -d, -d, - d, d, - d, -d, - -d, -d + -d, d, 0,1, + -d, -d, 0, 0, + d,d, 1,1, + // + d,d, 1,1, + -d, -d, 0, 0, + + d, -d, 1, 0 }; GLuint VAO, VBO; // holds quad shape |