cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
2 lines (1 loc) • 3.12 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var r,t,a,e,i,n=require("./Vector3.js"),d=require("../glmatrix/vec3.js"),u=function(r,t){this.origin=r||new n.default,this.direction=t||new n.default};u.prototype={constructor:u,intersectPlane:function(r,t){var a=r.normal.array,e=r.distance,i=this.origin.array,u=this.direction.array,l=d.default.dot(a,u);if(0===l)return null;t||(t=new n.default);var o=(d.default.dot(a,i)-e)/l;return d.default.scaleAndAdd(t.array,i,u,-o),t._dirty=!0,t},mirrorAgainstPlane:function(r){var t=d.default.dot(r.normal.array,this.direction.array);d.default.scaleAndAdd(this.direction.array,this.direction.array,r.normal.array,2*-t),this.direction._dirty=!0},distanceToPoint:(i=d.default.create(),function(r){d.default.sub(i,r,this.origin.array);var t=d.default.dot(i,this.direction.array);if(t<0)return d.default.distance(this.origin.array,r);var a=d.default.lenSquared(i);return Math.sqrt(a-t*t)}),intersectSphere:function(){var r=d.default.create();return function(t,a,e){var i=this.origin.array,u=this.direction.array;t=t.array,d.default.sub(r,t,i);var l=d.default.dot(r,u),o=d.default.squaredLength(r)-l*l,s=a*a;if(!(o>s)){var f=Math.sqrt(s-o),c=l-f,y=l+f;return e||(e=new n.default),c<0?y<0?null:(d.default.scaleAndAdd(e.array,i,u,y),e):(d.default.scaleAndAdd(e.array,i,u,c),e)}}}(),intersectBoundingBox:function(r,t){var a,e,i,u,l,o,s=this.direction.array,f=this.origin.array,c=r.min.array,y=r.max.array,h=1/s[0],v=1/s[1],g=1/s[2];if(h>=0?(a=(c[0]-f[0])*h,e=(y[0]-f[0])*h):(e=(c[0]-f[0])*h,a=(y[0]-f[0])*h),v>=0?(i=(c[1]-f[1])*v,u=(y[1]-f[1])*v):(u=(c[1]-f[1])*v,i=(y[1]-f[1])*v),a>u||i>e)return null;if((i>a||a!=a)&&(a=i),(u<e||e!=e)&&(e=u),g>=0?(l=(c[2]-f[2])*g,o=(y[2]-f[2])*g):(o=(c[2]-f[2])*g,l=(y[2]-f[2])*g),a>o||l>e)return null;if((l>a||a!=a)&&(a=l),(o<e||e!=e)&&(e=o),e<0)return null;var A=a>=0?a:e;return t||(t=new n.default),d.default.scaleAndAdd(t.array,f,s,A),t},intersectTriangle:(r=d.default.create(),t=d.default.create(),a=d.default.create(),e=d.default.create(),function(i,u,l,o,s,f){var c=this.direction.array,y=this.origin.array;i=i.array,u=u.array,l=l.array,d.default.sub(r,u,i),d.default.sub(t,l,i),d.default.cross(e,t,c);var h=d.default.dot(r,e);if(o){if(h>-1e-5)return null}else if(h>-1e-5&&h<1e-5)return null;d.default.sub(a,y,i);var v=d.default.dot(e,a)/h;if(v<0||v>1)return null;d.default.cross(e,r,a);var g=d.default.dot(c,e)/h;if(g<0||g>1||v+g>1)return null;d.default.cross(e,r,t);var A=-d.default.dot(a,e)/h;return A<0?null:(s||(s=new n.default),f&&n.default.set(f,1-v-g,v,g),d.default.scaleAndAdd(s.array,y,c,A),s)}),applyTransform:function(r){n.default.add(this.direction,this.direction,this.origin),n.default.transformMat4(this.origin,this.origin,r),n.default.transformMat4(this.direction,this.direction,r),n.default.sub(this.direction,this.direction,this.origin),n.default.normalize(this.direction,this.direction)},copy:function(r){n.default.copy(this.origin,r.origin),n.default.copy(this.direction,r.direction)},clone:function(){var r=new u;return r.copy(this),r}};var l=u;exports.default=l;