mirror of https://github.com/CGAL/cgal
Add clipbox management in flat_shader
This commit is contained in:
parent
bac0452224
commit
de7999ce09
|
|
@ -5,6 +5,7 @@ in GS_OUT
|
|||
vec4 fP;
|
||||
flat vec3 normal;
|
||||
flat vec4 color;
|
||||
float dist[6];
|
||||
} fs_in;
|
||||
|
||||
uniform bool is_two_side;
|
||||
|
|
@ -13,11 +14,20 @@ uniform vec4 light_diff;
|
|||
uniform vec4 light_spec;
|
||||
uniform vec4 light_amb;
|
||||
uniform float spec_power ;
|
||||
uniform bool is_clipbox_on;
|
||||
|
||||
out vec4 out_color;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
if(is_clipbox_on)
|
||||
if(fs_in.dist[0]>0 ||
|
||||
fs_in.dist[1]>0 ||
|
||||
fs_in.dist[2]>0 ||
|
||||
fs_in.dist[3]>0 ||
|
||||
fs_in.dist[4]>0 ||
|
||||
fs_in.dist[5]>0)
|
||||
discard;
|
||||
vec3 L = light_pos.xyz - fs_in.fP.xyz;
|
||||
vec3 V = -fs_in.fP.xyz;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ in VS_OUT
|
|||
vec4 fP;
|
||||
vec3 normal;
|
||||
vec4 out_color;
|
||||
float dist[6];
|
||||
} gs_in[3];
|
||||
|
||||
out GS_OUT
|
||||
|
|
@ -15,6 +16,7 @@ out GS_OUT
|
|||
vec4 fP;
|
||||
flat vec3 normal;
|
||||
flat vec4 color;
|
||||
float dist[6];
|
||||
} gs_out;
|
||||
|
||||
uniform mat4 mv_matrix;
|
||||
|
|
@ -24,11 +26,14 @@ void main(void)
|
|||
gl_Position = gl_in[0].gl_Position;
|
||||
gs_out.fP = gs_in[0].fP;
|
||||
|
||||
for(int i=0; i< 6; ++i)
|
||||
gs_out.dist[i] = gs_in[0].dist[i];
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = gl_in[1].gl_Position;
|
||||
gs_out.fP = gs_in[1].fP;
|
||||
|
||||
for(int i=0; i< 6; ++i)
|
||||
gs_out.dist[i] = gs_in[1].dist[i];
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = gl_in[2].gl_Position;
|
||||
|
|
@ -45,6 +50,9 @@ EmitVertex();
|
|||
gs_out.normal = mat3(mv_matrix)* normal;
|
||||
gs_out.color = gs_in[2].out_color;
|
||||
|
||||
for(int i=0; i< 6; ++i)
|
||||
gs_out.dist[i] = gs_in[2].dist[i];
|
||||
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
|
|
|||
|
|
@ -3,19 +3,41 @@
|
|||
in vec4 vertex;
|
||||
in vec3 normals;
|
||||
in vec4 colors;
|
||||
|
||||
out VS_OUT
|
||||
{
|
||||
vec4 fP;
|
||||
vec3 normal;
|
||||
vec4 out_color;
|
||||
float dist[6];
|
||||
}vs_out;
|
||||
|
||||
uniform mat4 mvp_matrix;
|
||||
uniform mat4 mv_matrix;
|
||||
uniform bool is_clipbox_on;
|
||||
uniform highp mat4x4 clipbox1;
|
||||
uniform highp mat4x4 clipbox2;
|
||||
|
||||
void compute_distances(void)
|
||||
{
|
||||
for(int i=0; i<3; ++i)
|
||||
{
|
||||
vs_out.dist[i]=
|
||||
clipbox1[i][0]*vertex.x+
|
||||
clipbox1[i][1]*vertex.y+
|
||||
clipbox1[i][2]*vertex.z +
|
||||
clipbox1[i][3];
|
||||
vs_out.dist[i+3]=
|
||||
clipbox2[i][0]*vertex.x+
|
||||
clipbox2[i][1]*vertex.y+
|
||||
clipbox2[i][2]*vertex.z +
|
||||
clipbox2[i][3];
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
if(is_clipbox_on)
|
||||
compute_distances();
|
||||
vs_out.out_color=colors;
|
||||
vs_out.fP = mv_matrix * vertex;
|
||||
vs_out.normal = normals;
|
||||
|
|
|
|||
Loading…
Reference in New Issue