Tried to further improve the rendering of the flame; didn't quite work.

This commit is contained in:
Faerbit 2015-03-01 23:28:36 +01:00
parent 805a5f19b5
commit 813d50ee94
2 changed files with 28 additions and 18 deletions

View File

@ -5,14 +5,19 @@ uniform vec3 camera;
in vec3 fColor; in vec3 fColor;
in GS_OUT { in GS_OUT {
vec3 normal; smooth vec3 normal;
smooth vec3 position;
}fs_in; }fs_in;
out vec4 oColor; out vec4 oColor;
void main() { void main() {
float dotProduct = dot(fs_in.normal, camera); float dotProduct = dot(normalize(fs_in.normal), normalize(camera - fs_in.position));
vec3 color = fColor * dotProduct; if (dotProduct < 0.1 && dotProduct > 0.0){
oColor = vec4(color, 0.5); oColor = vec4(1.0, 0.0, 0.0, 0.5);
}
else {
oColor = vec4(fColor, 0.5);
}
} }

View File

@ -6,10 +6,11 @@ uniform bool bottom;
uniform bool left; uniform bool left;
layout(points) in; layout(points) in;
layout(triangle_strip, max_vertices = 102) out; layout(triangle_strip, max_vertices = 78) out;
out GS_OUT { out GS_OUT {
vec3 normal; smooth vec3 normal;
smooth vec3 position;
}gs_out; }gs_out;
in vec3 Color[]; in vec3 Color[];
@ -66,27 +67,31 @@ void main() {
float rightAngle = PI * 2.0 / resolution * (j+1); float rightAngle = PI * 2.0 / resolution * (j+1);
vec4 offset = vec4(cos(rightAngle) * downRadius, i, -sin(rightAngle) * downRadius, 0.0); vec4 offset = vec4(cos(rightAngle) * downRadius, i, -sin(rightAngle) * downRadius, 0.0);
vec4 position0 = gl_in[0].gl_Position + viewProjectionMatrix * offset; vec4 position = gl_in[0].gl_Position + viewProjectionMatrix * offset;
gl_Position = position0; gl_Position = position;
gs_out.normal = -vec3(position0 - gl_in[0].gl_Position); gs_out.normal = vec3(position - gl_in[0].gl_Position);
gs_out.position = vec3(position);
EmitVertex(); EmitVertex();
offset = vec4(cos(rightAngle) * upRadius, i + step, -sin(rightAngle) * upRadius, 0.0); offset = vec4(cos(rightAngle) * upRadius, i + step, -sin(rightAngle) * upRadius, 0.0);
vec4 position1 = gl_in[0].gl_Position + viewProjectionMatrix * offset; position = gl_in[0].gl_Position + viewProjectionMatrix * offset;
gl_Position = position1; gl_Position = position;
gs_out.normal = -vec3(position1 - gl_in[0].gl_Position); gs_out.normal = vec3(position - gl_in[0].gl_Position);
gs_out.position = vec3(position);
EmitVertex(); EmitVertex();
offset = vec4(cos(leftAngle) * downRadius, i, -sin(leftAngle) * downRadius, 0.0); offset = vec4(cos(leftAngle) * downRadius, i, -sin(leftAngle) * downRadius, 0.0);
vec4 position2 = gl_in[0].gl_Position + viewProjectionMatrix * offset; position = gl_in[0].gl_Position + viewProjectionMatrix * offset;
gl_Position = position2; gl_Position = position;
gs_out.normal = -vec3(position2 - gl_in[0].gl_Position); gs_out.normal = vec3(position - gl_in[0].gl_Position);
gs_out.position = vec3(position);
EmitVertex(); EmitVertex();
offset = vec4(cos(leftAngle) * upRadius, i + step, -sin(leftAngle) * upRadius, 0.0); offset = vec4(cos(leftAngle) * upRadius, i + step, -sin(leftAngle) * upRadius, 0.0);
vec4 position3 = gl_in[0].gl_Position + viewProjectionMatrix * offset; position = gl_in[0].gl_Position + viewProjectionMatrix * offset;
gl_Position = position3; gl_Position = position;
gs_out.normal = -vec3(position3 - gl_in[0].gl_Position); gs_out.normal = vec3(position - gl_in[0].gl_Position);
gs_out.position = vec3(position);
EmitVertex(); EmitVertex();
EndPrimitive(); EndPrimitive();