aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buffer/vertex/fluid_cell_buffer.h5
-rw-r--r--src/buffer/vertex/lattice_cell_buffer.cc19
-rw-r--r--src/buffer/vertex/lattice_cell_buffer.h4
-rw-r--r--src/shader/code/collide.glsl32
-rw-r--r--src/shader/code/geometry.glsl10
-rw-r--r--src/shader/code/vertex.glsl10
6 files changed, 41 insertions, 39 deletions
diff --git a/src/buffer/vertex/fluid_cell_buffer.h b/src/buffer/vertex/fluid_cell_buffer.h
index f71c2cb..9e535cb 100644
--- a/src/buffer/vertex/fluid_cell_buffer.h
+++ b/src/buffer/vertex/fluid_cell_buffer.h
@@ -1,12 +1,11 @@
#pragma once
-#include <vector>
-
#include <GL/glew.h>
class FluidCellBuffer {
private:
- std::vector<GLfloat> _data;
+ const GLuint _nX;
+ const GLuint _nY;
GLuint _array;
GLuint _buffer;
diff --git a/src/buffer/vertex/lattice_cell_buffer.cc b/src/buffer/vertex/lattice_cell_buffer.cc
index c2b877b..ea4e103 100644
--- a/src/buffer/vertex/lattice_cell_buffer.cc
+++ b/src/buffer/vertex/lattice_cell_buffer.cc
@@ -1,19 +1,20 @@
#include "lattice_cell_buffer.h"
-#include <fstream>
+#include <vector>
-LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY):
- _data(9*nX*nY, GLfloat{1./9.}) {
+LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY) {
glGenVertexArrays(1, &_array);
glGenBuffers(1, &_buffer);
- const int inset = 0.4*nX;
+ std::vector<GLfloat> data(9*nX*nY, GLfloat{1./9.});
+ const int insetX = 0.45*nX;
+ const int insetY = 0.45*nY;
- for (int x = inset; x < nX-inset; x++) {
- for (int y = inset; y < nY-inset; y++) {
+ for (int x = insetX; x < nX-insetX; x++) {
+ for (int y = insetY; y < nY-insetY; y++) {
for ( int i = -1; i <= 1; ++i ) {
for ( int j = -1; j <= 1; ++j ) {
- _data[9*nX*y + 9*x + (i+1)*3 + j+1] = 1./64.;
+ data[9*nX*y + 9*x + (i+1)*3 + j+1] = 0.5;
}
}
}
@@ -23,8 +24,8 @@ LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY):
glBindBuffer(GL_ARRAY_BUFFER, _buffer);
glBufferData(
GL_ARRAY_BUFFER,
- _data.size() * sizeof(GLfloat),
- _data.data(),
+ data.size() * sizeof(GLfloat),
+ data.data(),
GL_DYNAMIC_DRAW
);
diff --git a/src/buffer/vertex/lattice_cell_buffer.h b/src/buffer/vertex/lattice_cell_buffer.h
index f6638c8..e5e00a4 100644
--- a/src/buffer/vertex/lattice_cell_buffer.h
+++ b/src/buffer/vertex/lattice_cell_buffer.h
@@ -1,13 +1,9 @@
#pragma once
-#include <vector>
-
#include <GL/glew.h>
class LatticeCellBuffer {
private:
- std::vector<GLfloat> _data;
-
GLuint _array;
GLuint _buffer;
diff --git a/src/shader/code/collide.glsl b/src/shader/code/collide.glsl
index 3982ad8..f960dcd 100644
--- a/src/shader/code/collide.glsl
+++ b/src/shader/code/collide.glsl
@@ -13,7 +13,19 @@ uniform uint nY;
const uint q = 9;
const float omega = 0.6;
-const float displayAmplifier = 1000.;
+const float displayAmplifier = 10.;
+
+float comp(int x, int y, vec2 v) {
+ return x*v.x + y*v.y;
+}
+
+float sq(float x) {
+ return x*x;
+}
+
+float norm(vec2 v) {
+ return sqrt(sq(v.x)+sq(v.y));
+}
float get(uint x, uint y, int i, int j) {
return collideCells[q*nX*y + q*x + (i+1)*3 + j+1];
@@ -24,9 +36,9 @@ void set(uint x, uint y, int i, int j, float v) {
}
void setFluid(uint x, uint y, vec2 v, float d) {
- fluidCells[3*nX*y + 3*x + 0] = float(x)-nX/2 + displayAmplifier*v.x;
- fluidCells[3*nX*y + 3*x + 1] = float(y)-nY/2 + displayAmplifier*v.y;
- fluidCells[3*nX*y + 3*x + 2] = d;
+ fluidCells[3*nX*y + 3*x + 0] = float(x)-nX/2;// + displayAmplifier*v.x;
+ fluidCells[3*nX*y + 3*x + 1] = float(y)-nY/2;// + displayAmplifier*v.y;
+ fluidCells[3*nX*y + 3*x + 2] = displayAmplifier * norm(v);
}
float density(uint x, uint y) {
@@ -70,18 +82,6 @@ float w(int i, int j) {
}
}
-float comp(int x, int y, vec2 v) {
- return x*v.x + y*v.y;
-}
-
-float sq(float x) {
- return x*x;
-}
-
-float norm(vec2 v) {
- return sqrt(sq(v.x)+sq(v.y));
-}
-
void main() {
const uint x = gl_GlobalInvocationID.x;
const uint y = gl_GlobalInvocationID.y;
diff --git a/src/shader/code/geometry.glsl b/src/shader/code/geometry.glsl
index 6ecfc99..e74d52f 100644
--- a/src/shader/code/geometry.glsl
+++ b/src/shader/code/geometry.glsl
@@ -17,7 +17,7 @@ vec4 project(vec4 v) {
}
void emitSquareAt(vec4 position) {
- const float size = 0.2;
+ const float size = 0.5;
gl_Position = project(position + vec4(-size, -size, 0.0, 0.0));
EmitVertex();
@@ -30,10 +30,8 @@ void emitSquareAt(vec4 position) {
}
void main() {
- if ( gl_in[0].gl_Position.xyz != vec3(0.,0.,0.) ) {
- color = gs_in[0].color;
- emitSquareAt(gl_in[0].gl_Position);
- EndPrimitive();
- }
+ color = gs_in[0].color;
+ emitSquareAt(gl_in[0].gl_Position);
+ EndPrimitive();
}
)";
diff --git a/src/shader/code/vertex.glsl b/src/shader/code/vertex.glsl
index 453b6fa..516f2c6 100644
--- a/src/shader/code/vertex.glsl
+++ b/src/shader/code/vertex.glsl
@@ -7,8 +7,16 @@ out VS_OUT {
vec3 color;
} vs_out;
+float unit(float x) {
+ return 1.0/(1.0+exp(-x));
+}
+
+vec3 getColor(float x) {
+ return x*vec3(1.0,0.0,0.0) + (1-x)*vec3(-0.5,0.0,1.0);
+}
+
void main() {
gl_Position = vec4(VertexPosition.xy, 0., 1.);
- vs_out.color = vec3(VertexPosition.z, 0., 0.);
+ vs_out.color = getColor(unit(VertexPosition.z));
}
)";