UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

2 lines (1 loc) 2.89 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e,t,i,r,n,a=require("../core/Base.js"),s=require("../math/Ray.js"),o=require("../math/Vector2.js"),l=require("../math/Vector3.js"),u=require("../math/Matrix4.js"),c=require("../Renderable.js"),d=require("../core/glenum.js"),f=require("../glmatrix/vec3.js"),h=a.default.extend({scene:null,camera:null,renderer:null},(function(){this._ray=new s.default,this._ndc=new o.default}),{pick:function(e,t,i){return this.pickAll(e,t,[],i)[0]||null},pickAll:function(e,t,i,r){return this.renderer.screenToNDC(e,t,this._ndc),this.camera.castRay(this._ndc,this._ray),i=i||[],this._intersectNode(this.scene,i,r||!1),i.sort(this._intersectionCompareFunc),i},_intersectNode:function(e,t,i){e instanceof c.default&&e.isRenderable()&&(e.ignorePicking&&!i||!(e.mode===d.default.TRIANGLES&&e.geometry.isUseIndices()||e.geometry.pickByRay||e.geometry.pick)||this._intersectRenderable(e,t));for(var r=0;r<e._children.length;r++)this._intersectNode(e._children[r],t,i)},_intersectRenderable:(e=new l.default,t=new l.default,i=new l.default,r=new s.default,n=new u.default,function(a,s){var o=a.isSkinnedMesh();r.copy(this._ray),u.default.invert(n,a.worldTransform),o||r.applyTransform(n);var c=a.geometry,g=o?a.skeleton.boundingBox:c.boundingBox;if(!g||r.intersectBoundingBox(g))if(c.pick)c.pick(this._ndc.x,this._ndc.y,this.renderer,this.camera,a,s);else if(c.pickByRay)c.pickByRay(r,a,s);else{var y,_,m=a.cullFace===d.default.BACK&&a.frontFace===d.default.CCW||a.cullFace===d.default.FRONT&&a.frontFace===d.default.CW,p=c.indices,v=c.attributes.position,k=c.attributes.weight,b=c.attributes.joint,j=[];if(v&&v.value&&p){if(o){_=a.skeleton.getSubSkinMatrices(a.__uid__,a.joints);for(var w=0;w<a.joints.length;w++){j[w]=j[w]||[];for(var x=0;x<16;x++)j[w][x]=_[16*w+x]}var R=[],B=[],C=[],T=[],q=[],A=c.attributes.skinnedPosition;for(A&&A.value||(c.createAttribute("skinnedPosition","f",3),(A=c.attributes.skinnedPosition).init(c.vertexCount)),w=0;w<c.vertexCount;w++){for(v.get(w,R),k.get(w,B),b.get(w,C),B[3]=1-B[0]-B[1]-B[2],f.default.set(T,0,0,0),x=0;x<4;x++)C[x]>=0&&B[x]>1e-4&&(f.default.transformMat4(q,R,j[C[x]]),f.default.scaleAndAdd(T,T,q,B[x]));A.set(w,T)}}for(w=0;w<p.length;w+=3){var F=p[w],M=p[w+1],N=p[w+2],P=o?c.attributes.skinnedPosition:v;if(P.get(F,e.array),P.get(M,t.array),P.get(N,i.array),y=m?r.intersectTriangle(e,t,i,a.culling):r.intersectTriangle(e,i,t,a.culling)){var S=new l.default;o?l.default.copy(S,y):l.default.transformMat4(S,y,a.worldTransform),s.push(new h.Intersection(y,S,a,[F,M,N],w/3,l.default.dist(S,this._ray.origin)))}}}}}),_intersectionCompareFunc:function(e,t){return e.distance-t.distance}});h.Intersection=function(e,t,i,r,n,a){this.point=e,this.pointWorld=t,this.target=i,this.triangle=r,this.triangleIndex=n,this.distance=a};var g=h;exports.default=g;