generate mesh from points using geometry shader
parent
e7fc35ec47
commit
54c7fa172f
|
@ -2,29 +2,29 @@
|
||||||
|
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
in vec3 vNormal;
|
in vec3 TexCoord;
|
||||||
in vec3 vTexCoord;
|
in vec3 Normal;
|
||||||
in vec3 FragPos;
|
in vec3 FragPos;
|
||||||
|
|
||||||
vec3 lightColor = vec3(1.0);
|
vec3 lightColor = vec3(1.0);
|
||||||
vec3 lightDir = -normalize(vec3(0.0, 100.0, 0.0) - vec3(32.0));
|
vec3 lightDir = -normalize(vec3(0.0, 100.0, 0.0) - vec3(32.0));
|
||||||
|
|
||||||
float ambientStrength = 0.4;
|
float ambientStrength = 0.1;
|
||||||
float diffuseStrength = 0.45;
|
float diffuseStrength = 0.8;
|
||||||
float specularStrength = 0.05;
|
float specularStrength = 0.1;
|
||||||
|
|
||||||
uniform vec3 viewPos;
|
uniform vec3 viewPos;
|
||||||
uniform float u_time;
|
uniform float u_time;
|
||||||
uniform sampler2DArray textureArray;
|
uniform sampler2DArray textureArray;
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
vec3 vColor = vec3(texture(textureArray, vTexCoord));
|
// Load the texture
|
||||||
|
// anti-gamma-correction of the texture. Without this it would be gamma corrected twice!
|
||||||
|
vec3 vColor = texture(textureArray, TexCoord).rgb;
|
||||||
|
|
||||||
// offset the normal a tiny bit, so that the color of faces opposing lightDir is not completely
|
vec3 normal = normalize(Normal);
|
||||||
// flat
|
|
||||||
vec3 normal = normalize(vNormal);
|
|
||||||
|
|
||||||
// Blinn-Phong lighting
|
/* Start of Blinn-Phong lighting */
|
||||||
// Ambient
|
// Ambient
|
||||||
vec3 ambient = lightColor*vColor;
|
vec3 ambient = lightColor*vColor;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
#version 330 core
|
||||||
|
|
||||||
|
layout (points) in;
|
||||||
|
layout (triangle_strip, max_vertices = 4) out;
|
||||||
|
|
||||||
|
in VS_OUT{
|
||||||
|
vec3 Extents;
|
||||||
|
vec3 Normal;
|
||||||
|
float BlockType;
|
||||||
|
} gs_in[];
|
||||||
|
|
||||||
|
out vec3 TexCoord;
|
||||||
|
out vec3 Normal;
|
||||||
|
out vec3 FragPos;
|
||||||
|
|
||||||
|
uniform mat4 view;
|
||||||
|
uniform mat4 projection;
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
Normal = gs_in[0].Normal;
|
||||||
|
|
||||||
|
TexCoord = vec3(0.0, 0.0, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position;
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
if(gs_in[0].Extents.x == 0){
|
||||||
|
TexCoord = vec3(0.0, gs_in[0].Extents.z, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(0.0, 0.0, gs_in[0].Extents.z, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.y, 0.0, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(0.0, gs_in[0].Extents.y, 0.0, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.y, gs_in[0].Extents.z, gs_in[0].BlockType);
|
||||||
|
}
|
||||||
|
else if(gs_in[0].Extents.y == 0){
|
||||||
|
TexCoord = vec3(0.0, gs_in[0].Extents.z, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(0.0, 0.0, gs_in[0].Extents.z, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.x, 0.0, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(gs_in[0].Extents.x, 0.0, 0.0, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.x, gs_in[0].Extents.z, gs_in[0].BlockType);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.x, 0.0, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(gs_in[0].Extents.x, 0.0, 0.0, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(0.0, gs_in[0].Extents.y, gs_in[0].BlockType);
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(0.0, gs_in[0].Extents.y, 0.0, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
TexCoord = vec3(gs_in[0].Extents.x, gs_in[0].Extents.y, gs_in[0].BlockType);
|
||||||
|
}
|
||||||
|
|
||||||
|
gl_Position = gl_in[0].gl_Position + vec4(gs_in[0].Extents, 0.0);
|
||||||
|
FragPos = vec3(gl_Position);
|
||||||
|
gl_Position = projection * view * gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
|
||||||
|
EndPrimitive();
|
||||||
|
}
|
|
@ -1,22 +1,27 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
layout (location = 1) in vec3 aNormal;
|
layout (location = 1) in vec3 aExtents;
|
||||||
layout (location = 2) in vec3 aTexCoord;
|
layout (location = 2) in vec2 aInfo;
|
||||||
|
|
||||||
uniform mat4 model;
|
uniform mat4 model;
|
||||||
uniform mat4 view;
|
|
||||||
uniform mat4 projection;
|
|
||||||
|
|
||||||
out vec3 vNormal;
|
out VS_OUT {
|
||||||
out vec3 vTexCoord;
|
vec3 Extents;
|
||||||
out vec3 FragPos;
|
vec3 Normal;
|
||||||
|
float BlockType;
|
||||||
|
} vs_out;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vTexCoord = aTexCoord;
|
//vNormal = mat3(transpose(inverse(model))) * aNormal;
|
||||||
vNormal = mat3(transpose(inverse(model))) * aNormal;
|
vs_out.Extents = aExtents;
|
||||||
|
vs_out.BlockType = aInfo.y;
|
||||||
|
|
||||||
FragPos = vec3(model*vec4(aPos, 1.0));
|
if(aExtents.x == 0) vs_out.Normal = vec3(1.0 - 2*aInfo.x, 0.0, 0.0);
|
||||||
gl_Position = projection * view * model * vec4(aPos, 1.0);
|
else if(aExtents.y == 0) vs_out.Normal = vec3(0.0, 1.0 - 2*aInfo.x, 0.0);
|
||||||
|
else vs_out.Normal = vec3(0.0, 0.0, 1.0 - 2*aInfo.x);
|
||||||
|
vs_out.Normal = mat3(transpose(inverse(model))) * vs_out.Normal;
|
||||||
|
|
||||||
|
gl_Position = model * vec4(aPos, 1.0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue