if (flag == 0) { // entirely inside clipping volume
ScanConvert(raster);
} else
if (flag == 7) { // entirely outside clipping volume
return;
} else {
// permute triangle vertices to one of two canonical forms:
// 1. Just v2 outside of clipping volume (flag == 4)
// 2. v1 and v2 outside of clippling volume (flag == 6)
if (flag == 1) {
Vertex3D tv = v0;
v0 = v1;
v1 = v2;
v2 = tv;
flag = 4;
} else
if (flag == 2) {
Vertex3D tv = v0;
v0 = v2;
v2 = v1;
v1 = tv;
flag = 4;
} else
if (flag == 3) {
Vertex3D tv = v0;
v0 = v2;
v2 = v1;
v1 = tv;
} else
if (flag == 5) {
Vertex3D tv = v0;
v0 = v1;
v1 = v2;
v2 = tv;
}