@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.34 kB
JavaScript
class t{constructor(){this.planes=[];for(let t=0;t<6;t++)this.planes[t]=[]}setFromMat4(t){const s=t.data;let r;const e=this.planes;r=e[0],r[0]=s[3]-s[0],r[1]=s[7]-s[4],r[2]=s[11]-s[8],r[3]=s[15]-s[12];let n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]);r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n,r=e[1],r[0]=s[3]+s[0],r[1]=s[7]+s[4],r[2]=s[11]+s[8],r[3]=s[15]+s[12],n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n,r=e[2],r[0]=s[3]+s[1],r[1]=s[7]+s[5],r[2]=s[11]+s[9],r[3]=s[15]+s[13],n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n,r=e[3],r[0]=s[3]-s[1],r[1]=s[7]-s[5],r[2]=s[11]-s[9],r[3]=s[15]-s[13],n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n,r=e[4],r[0]=s[3]-s[2],r[1]=s[7]-s[6],r[2]=s[11]-s[10],r[3]=s[15]-s[14],n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n,r=e[5],r[0]=s[3]+s[2],r[1]=s[7]+s[6],r[2]=s[11]+s[10],r[3]=s[15]+s[14],n=Math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),r[0]/=n,r[1]/=n,r[2]/=n,r[3]/=n}containsPoint(t){let s,r;for(s=0;s<6;s++)if(r=this.planes[s],r[0]*t.x+r[1]*t.y+r[2]*t.z+r[3]<=0)return!1;return!0}containsSphere(t){let s,r,e=0;const n=t.radius,a=t.center,o=a.x,h=a.y,l=a.z,i=this.planes;let c;for(r=0;r<6;r++){if(c=i[r],s=c[0]*o+c[1]*h+c[2]*l+c[3],s<=-n)return 0;s>n&&e++}return 6===e?2:1}}export{t as Frustum};