diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/buffer/vertex/fluid_cell_buffer.h | 5 | ||||
| -rw-r--r-- | src/buffer/vertex/lattice_cell_buffer.cc | 19 | ||||
| -rw-r--r-- | src/buffer/vertex/lattice_cell_buffer.h | 4 | ||||
| -rw-r--r-- | src/shader/code/collide.glsl | 32 | ||||
| -rw-r--r-- | src/shader/code/geometry.glsl | 10 | ||||
| -rw-r--r-- | src/shader/code/vertex.glsl | 10 | 
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));  }  )"; | 
