mirror of https://github.com/CGAL/cgal
Added clip support for tetrahedral meshes
This commit is contained in:
parent
41702c944b
commit
45f0c6665a
|
|
@ -2,6 +2,7 @@
|
|||
in vec4 color;
|
||||
in vec4 fP;
|
||||
in vec3 fN;
|
||||
in float dist[6];
|
||||
flat in vec2 subdomain_out;
|
||||
uniform vec4 light_pos;
|
||||
uniform vec4 light_diff;
|
||||
|
|
@ -10,6 +11,7 @@ uniform vec4 light_amb;
|
|||
uniform float spec_power ;
|
||||
uniform int is_two_side;
|
||||
uniform bool is_selected;
|
||||
uniform bool is_clipbox_on;
|
||||
uniform float near;
|
||||
uniform float far;
|
||||
uniform float width;
|
||||
|
|
@ -28,7 +30,19 @@ float depth(float z)
|
|||
return (2 * near) / (far + near - z * (far - near));
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
bool compute_clip_visibility() {
|
||||
if(is_clipbox_on)
|
||||
return dist[0]>0.0 ||
|
||||
dist[1]>0.0 ||
|
||||
dist[2]>0.0 ||
|
||||
dist[3]>0.0 ||
|
||||
dist[4]>0.0 ||
|
||||
dist[5]>0.0;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
bool compute_filtering_visibility() {
|
||||
if(is_filterable)
|
||||
{
|
||||
uint domain1 = uint(subdomain_out.x);
|
||||
|
|
@ -37,10 +51,15 @@ void main(void) {
|
|||
uint i2 = domain2/25u;
|
||||
uint visible1 = uint(is_visible_bitset[i1]);
|
||||
uint visible2 = uint(is_visible_bitset[i2]);
|
||||
if((visible1>>(domain1%25u))%2u == 0u && (visible2>>(domain2%25u))%2u == 0u)
|
||||
{
|
||||
discard;
|
||||
return (visible1>>(domain1%25u))%2u == 0u && (visible2>>(domain2%25u))%2u == 0u;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
if (compute_clip_visibility() || compute_filtering_visibility()) {
|
||||
discard;
|
||||
}
|
||||
float d = depth(gl_FragCoord.z);
|
||||
float test = texture(sampler, vec2(gl_FragCoord.x/width, gl_FragCoord.y/height)).r;
|
||||
|
|
|
|||
|
|
@ -12,13 +12,37 @@ uniform float shrink_factor;
|
|||
out vec4 fP;
|
||||
out vec3 fN;
|
||||
out vec4 color;
|
||||
out float dist[6];
|
||||
flat out vec2 subdomain_out;
|
||||
uniform bool is_clipbox_on;
|
||||
uniform mat4 clipbox1;
|
||||
uniform mat4 clipbox2;
|
||||
uniform float point_size;
|
||||
|
||||
void compute_distances(void)
|
||||
{
|
||||
for(int i=0; i<3; ++i)
|
||||
{
|
||||
dist[i]=
|
||||
clipbox1[i][0]*vertex.x+
|
||||
clipbox1[i][1]*vertex.y+
|
||||
clipbox1[i][2]*vertex.z +
|
||||
clipbox1[i][3];
|
||||
dist[i+3]=
|
||||
clipbox2[i][0]*vertex.x+
|
||||
clipbox2[i][1]*vertex.y+
|
||||
clipbox2[i][2]*vertex.z +
|
||||
clipbox2[i][3];
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
subdomain_out = subdomain_in;
|
||||
gl_PointSize = point_size;
|
||||
color = vec4(colors, vertex.x * cutplane.x + vertex.y * cutplane.y + vertex.z * cutplane.z + cutplane.w);
|
||||
if(is_clipbox_on)
|
||||
compute_distances();
|
||||
fP = mv_matrix * vertex;
|
||||
|
||||
mat3 norm_matrix_3;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,22 @@
|
|||
#version 150
|
||||
in vec4 color;
|
||||
in float dist[6];
|
||||
flat in vec2 subdomain_out;
|
||||
uniform bool is_clipbox_on;
|
||||
uniform bool is_surface;
|
||||
uniform vec4 is_visible_bitset;
|
||||
uniform bool is_filterable;
|
||||
out vec4 out_color;
|
||||
void main(void)
|
||||
{
|
||||
if(is_clipbox_on)
|
||||
if(dist[0]>0.0 ||
|
||||
dist[1]>0.0 ||
|
||||
dist[2]>0.0 ||
|
||||
dist[3]>0.0 ||
|
||||
dist[4]>0.0 ||
|
||||
dist[5]>0.0)
|
||||
discard;
|
||||
if(is_filterable)
|
||||
{
|
||||
uint domain1 = uint(subdomain_out.x);
|
||||
|
|
|
|||
|
|
@ -5,12 +5,36 @@ in vec2 subdomain_in;
|
|||
uniform mat4 mvp_matrix;
|
||||
uniform vec4 cutplane;
|
||||
out vec4 color;
|
||||
out float dist[6];
|
||||
uniform float point_size;
|
||||
flat out vec2 subdomain_out;
|
||||
uniform bool is_clipbox_on;
|
||||
uniform mat4 clipbox1;
|
||||
uniform mat4 clipbox2;
|
||||
|
||||
void compute_distances(void)
|
||||
{
|
||||
for(int i=0; i<3; ++i)
|
||||
{
|
||||
dist[i]=
|
||||
clipbox1[i][0]*vertex.x+
|
||||
clipbox1[i][1]*vertex.y+
|
||||
clipbox1[i][2]*vertex.z +
|
||||
clipbox1[i][3];
|
||||
dist[i+3]=
|
||||
clipbox2[i][0]*vertex.x+
|
||||
clipbox2[i][1]*vertex.y+
|
||||
clipbox2[i][2]*vertex.z +
|
||||
clipbox2[i][3];
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
subdomain_out = subdomain_in;
|
||||
gl_PointSize = point_size;
|
||||
color = vec4(colors, vertex.x * cutplane.x + vertex.y * cutplane.y + vertex.z * cutplane.z + cutplane.w);
|
||||
if(is_clipbox_on)
|
||||
compute_distances();
|
||||
gl_Position = mvp_matrix * vertex;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue