geometry shader test

This commit is contained in:
micuat 2020-10-31 18:40:31 +01:00
parent a61e8d7cb0
commit c3c55ae4c7
4 changed files with 78 additions and 15 deletions

View file

@ -21,10 +21,10 @@ uniform vec3 uHottest3d1;
uniform vec3 uBetween; uniform vec3 uBetween;
in vec2 texCoordVarying; in vec2 texCoordVarying;
in vec3 vPos; in vec3 gPos;
in vec4 vTarget; in vec4 gTarget;
in float vTemperature; in float gTemperature;
in float vAge; in float gAge;
vec3 random3(vec3 c) { vec3 random3(vec3 c) {
@ -104,16 +104,16 @@ float simplex3d_fractal(vec3 m) {
void main() void main()
{ {
vec2 palette = vec2(vTemperature*3425, 0.5); vec2 palette = vec2(gTemperature*3425, 0.5);
vec3 remapedColorW = texture(warm1, palette).xyz; vec3 remapedColorW = texture(warm1, palette).xyz;
vec3 remapedColorC = texture(cold2, palette).xyz; vec3 remapedColorC = texture(cold2, palette).xyz;
float d = 80; float d = 80;
float D = 600; float D = 600;
float n = (simplex3d(vPos * vec3(0.01, 0.01, 0.1 * sin(u_time * 0.01)))) * 100; float n = (simplex3d(gPos * vec3(0.01, 0.01, 0.1 * sin(u_time * 0.01)))) * 100;
float rate = 1-smoothstep(D - d, D + d, length(vPos.x + uBetween.x) + n); float rate = 1-smoothstep(D - d, D + d, length(gPos.x + uBetween.x) + n);
rate *= uAreThereTwoPeopleTween; rate *= uAreThereTwoPeopleTween;
vec3 remapedColor = mix(remapedColorC, remapedColorW, rate); vec3 remapedColor = mix(remapedColorC, remapedColorW, rate);
float alpha = max(0, 1 - pow(vAge,4)) * .3; float alpha = max(0, 1 - pow(gAge,4)) * .2;
// if(vTemperature < 0.5) { // if(vTemperature < 0.5) {
// alpha *= vTemperature * 2; // alpha *= vTemperature * 2;
@ -122,7 +122,7 @@ void main()
// alpha *= 2; // alpha *= 2;
// } // }
if(vPos.z > -200) { if(gPos.z > -200) {
alpha = 0; alpha = 0;
} }
vec4 color = vec4(remapedColor, alpha); vec4 color = vec4(remapedColor, alpha);

View file

@ -0,0 +1,55 @@
layout (points) in;
layout (triangle_strip) out;
layout (max_vertices = 4) out;
// OF handled uniforms and attributes.
uniform mat4 projectionMatrix;
// App specific uniforms and attributes.
// uniform float uSpriteSize;
in vec4 vPosition[];
in vec2 vTexCoord[];
flat in int vValid[];
out vec2 texCoordVarying;
in vec3 vPos[];
in vec4 vTarget[];
in float vTemperature[];
in float vAge[];
// out vec2 gTexCoord;
out vec3 gPos;
out vec4 gTarget;
out float gTemperature;
out float gAge;
void main()
{
float uSpriteSize = 1.5;
// if (vValid[0] == 0) return;
texCoordVarying = vTexCoord[0];
gPos = vPos[0];
gTarget = vTarget[0];
gTemperature = vTemperature[0];
gAge = vAge[0];
for (int i = 0; i < gl_in.length(); ++i)
{
gl_Position = projectionMatrix * (vPosition[i] + vec4(1.0, -1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(1.0, 1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(-1.0, -1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(-1.0, 1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
EndPrimitive();
}
}

View file

@ -1,4 +1,5 @@
uniform mat4 modelViewProjectionMatrix; uniform mat4 modelViewProjectionMatrix;
uniform mat4 modelViewMatrix;
uniform sampler2DRect particles0; uniform sampler2DRect particles0;
uniform sampler2DRect particles1; uniform sampler2DRect particles1;
uniform sampler2DRect particles2; uniform sampler2DRect particles2;
@ -7,19 +8,21 @@ uniform sampler2DRect particles3;
in vec4 position; in vec4 position;
in vec2 texcoord; in vec2 texcoord;
out vec2 texCoordVarying; out vec2 vTexCoord;
out vec3 vPos; out vec3 vPos;
out vec4 vTarget; out vec4 vTarget;
out float vTemperature; out float vTemperature;
out float vAge; out float vAge;
out vec4 vPosition;
void main() void main()
{ {
texCoordVarying = texcoord; // vTexCoord = vec2(gl_InstanceID % 512, gl_InstanceID / 512);
vec4 misc = texture(particles2, texCoordVarying); vTexCoord = texcoord;
vec4 vTarget = texture(particles3, texCoordVarying); vec4 misc = texture(particles2, vTexCoord);
vec4 vTarget = texture(particles3, vTexCoord);
vTemperature = misc.x; vTemperature = misc.x;
vAge = misc.y; vAge = misc.y;
vPos = texture(particles0, texCoordVarying).xyz; vPos = texture(particles0, vTexCoord).xyz;
gl_Position = modelViewProjectionMatrix * vec4(vPos, 1.0); vPosition = modelViewMatrix * vec4(vPos, 1.0);
} }

View file

@ -365,6 +365,11 @@ void ofApp::draw()
if (blendAdd) if (blendAdd)
{ {
ofEnableBlendMode(OF_BLENDMODE_ADD); ofEnableBlendMode(OF_BLENDMODE_ADD);
ofDisableDepthTest();
}
else
{
ofEnableDepthTest();
} }
particles.draw(); particles.draw();
if (blendAdd) if (blendAdd)