clippingVertex.glsl
1varying vec3 vPosition;
2
3void main() {
4 vPosition = (modelMatrix * vec4(position, 1.0)).xyz;
5}
clippingFragment.glsl
1uniform float cutX;
2uniform float cutY;
3uniform float cutZ;
4uniform vec4 uDiffuse;
5uniform vec3 uSphereCenter;
6uniform float uSphereRadius;
7uniform vec3 uBoxCenter;
8uniform float uBoxSize;
9
10varying vec3 vPosition;
11
12void main() {
13 float epsilon = 0.02;
14
15 //case plane
16 if (vPosition.x > cutX) {
17 discard;
18 }
19 if (vPosition.y > cutY) {
20 discard;
21 }
22 if (vPosition.z < cutZ) {
23 discard;
24 }
25
26 //case sphere
27 if (length(vPosition - uSphereCenter) < uSphereRadius) {
28 discard;
29 }
30
31 //case box
32 if (vPosition.x < uBoxCenter.x + uBoxSize / 2.0 && vPosition.x > uBoxCenter.x - uBoxSize / 2.0 &&
33 vPosition.y < uBoxCenter.y + uBoxSize / 2.0 && vPosition.y > uBoxCenter.y - uBoxSize / 2.0 &&
34 vPosition.z < uBoxCenter.z + uBoxSize / 2.0 && vPosition.z > uBoxCenter.z - uBoxSize / 2.0) {
35 discard;
36 }
37
38
39 if(vPosition.x <= cutX && vPosition.x >= cutX - epsilon){
40 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
41 return;
42 }
43 if(vPosition.y <= cutY && vPosition.y >= cutY - epsilon){
44 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
45 return;
46 }
47 if(vPosition.z >= cutZ && vPosition.z <= cutZ + epsilon){
48 gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
49 return;
50 }
51
52
53 gl_FragColor = vec4(uDiffuse);
54}
55