summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjjesswan <jessica_wan@brown.edu>2024-05-10 04:24:54 -0400
committerjjesswan <jessica_wan@brown.edu>2024-05-10 04:24:54 -0400
commit690670c920549828733fddc12e45bae34271aff4 (patch)
tree77fb560ce868de0b16634a33034722721cdeeb7a
parent7c0cd109b098b24279fb17b9a05ab846405d169b (diff)
texture particles
-rw-r--r--CMakeLists.txt2
-rw-r--r--resources/images/particle.pngbin0 -> 122878 bytes
-rw-r--r--resources/shaders/particles.frag6
-rw-r--r--resources/shaders/particles.vert6
-rwxr-xr-xsrc/glwidget.cpp4
-rwxr-xr-xsrc/glwidget.h1
-rw-r--r--src/particlesystem.cpp15
-rw-r--r--src/particlesystem.h17
8 files changed, 29 insertions, 22 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b7bd5ff..e2083ed 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/shaders/caustics.vert
diff --git a/resources/images/particle.png b/resources/images/particle.png
new file mode 100644
index 0000000..68b8ac2
--- /dev/null
+++ b/resources/images/particle.png
Binary files differ
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