Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tri tr;
- tr.v[0] = sf[i2];
- tr.v[1] = sf[i1];
- tr.v[2] = sf[i0];
- bool vc[3] = {clipv[i2], clipv[i1], clipv[i0]};
- bool isQuad = false;
- tri extraTri;
- if(vc[0] || vc[1] || vc[2]) {
- if(vc[0] && vc[1] && vc[2])
- continue;
- isQuad = (!vc[0] && (!vc[1] || !vc[2])) || (!vc[1] && !vc[2]);
- int clipIn = !vc[0] && vc[1] ? 0 : (!vc[1] && vc[2] ? 1 : 2);
- int clipOt = vc[0] && !vc[1] ? 0 : ( vc[1] && !vc[2] ? 1 : 2);
- v3 clipVec[2];
- for(int ix=0; ix<2; ix++) {
- int iva = ix==0 ? (clipIn+1)%3 : clipOt;
- int ivb = ix==0 ? clipIn : (clipOt+1)%3;
- float za = tr.v[iva].z;
- float zb = tr.v[ivb].z;
- float ip = 0;
- if(za != zb)
- ip = (zClip - za) / (zb - za);
- float zFac = zb / zClip;
- clipVec[ix].mkClip(tr.v[iva], tr.v[ivb], ip, zFac);
- }
- if(!isQuad)
- tr.v[(clipIn+1)%3] = clipVec[0], tr.v[clipOt] = clipVec[1];
- else {
- extraTri = tr;
- tr.v[(clipIn+1)%3] = clipVec[0];
- extraTri.v[clipIn] = clipVec[0];
- extraTri.v[clipOt] = clipVec[1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement