main
sigonasr2 2 years ago
parent cb58710187
commit 030f522d58
  1. 71
      3D

71
3D

@ -0,0 +1,71 @@
```function triangleClipAgainstPlane(planeP, planeN, inTri) {
var outTri1 = Tri(), outTri2 = Tri();
planeN = normVector(planeN);
var d = function(p) {
p = normVector(p);
return(dotVector(planeN, p) - dotVector(planeN, planeP));
};
var inside_points = Tri(),
nInsidePointCount = 0;
var outside_points = Tri(),
nOutsidePointCount = 0;
var d0 = d(inTri[0]);
var d1 = d(inTri[1]);
var d2 = d(inTri[2]);
if (d0 >= 0) {
inside_points[nInsidePointCount] = inTri[0];
nInsidePointCount++;
} else {
outside_points[nOutsidePointCount] = inTri[0];
nOutsidePointCount++;
}
if (d1 >= 0) {
inside_points[nInsidePointCount] = inTri[1];
nInsidePointCount++;
} else {
outside_points[nOutsidePointCount] = inTri[1];
nOutsidePointCount++;
}
if (d2 >= 0) {
inside_points[nInsidePointCount] = inTri[2];
nInsidePointCount++;
} else {
outside_points[nOutsidePointCount] = inTri[2];
nOutsidePointCount++;
}
if (nInsidePointCount === 0) {
return [0];
}
if (nInsidePointCount === 3) {
outTri1 = inTri;
return [1, [[outTri1[0], outTri1[1], outTri1[2]]]];
}
if (nInsidePointCount === 1 && nOutsidePointCount === 2) {
outTri1[0] = inside_points[0];
outTri1[1] = planeIntersectVector(planeP, planeN, inside_points[0], outside_points[0]);
outTri1[2] = planeIntersectVector(planeP, planeN, inside_points[0], outside_points[1]);
return [1, [[outTri1[0], outTri1[1], outTri1[2]]]];
}
if (nInsidePointCount === 2 && nOutsidePointCount === 1) {
outTri1[0] = inside_points[0];
outTri1[1] = inside_points[1];
outTri1[2] = planeIntersectVector(planeP, planeN, inside_points[0], outside_points[0]);
outTri2[0] = inside_points[1];
outTri2[1] = outTri1[2];
outTri2[2] = planeIntersectVector(planeP, planeN, inside_points[1], outside_points[0]);
return [2, [[outTri1[0], outTri1[1], outTri1[2]], [outTri2[0], outTri2[1], outTri2[2]]]];
}
};```
Loading…
Cancel
Save