2 lines
81 KiB
JavaScript
2 lines
81 KiB
JavaScript
|
|
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var y=require("react"),e=require("three"),x=require("@react-three/fiber"),z=require("../core/Line.cjs.js");function a(y){if(y&&y.__esModule)return y;var e=Object.create(null);return y&&Object.keys(y).forEach((function(x){if("default"!==x){var z=Object.getOwnPropertyDescriptor(y,x);Object.defineProperty(e,x,z.get?z:{enumerable:!0,get:function(){return y[x]}})}})),e.default=y,Object.freeze(e)}require("@babel/runtime/helpers/extends"),require("three-stdlib");var t=a(y),r=a(e);const n=new r.Vector3(0,0,-1),o=function(){const y=new r.Vector3,e=new r.Vector3,x=new r.Vector3,z=new r.Vector3,a=new r.Vector3;return function(t,r,n,o){return y.copy(t),e.copy(r),x.copy(n),z.copy(e).sub(y),a.copy(x).sub(y),o.crossVectors(a,z).normalize()}}();const i=t.forwardRef((({points:y=c.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0],face:e,facialTransformationMatrix:a,faceBlendshapes:i,offset:m,offsetScalar:l=80,width:p,height:u,depth:d=1,verticalTri:f=[159,386,152],origin:g,eyes:h=!0,eyesAsOrigin:N=!1,debug:E=!1,children:v,...w},b)=>{var R;e&&(y=e.keypoints,console.warn("Facemesh `face` prop is deprecated: use `points` instead"));const O=t.useRef(null),L=t.useRef(null),S=t.useRef(null),k=t.useRef(null),A=t.useRef(null),F=t.useRef(null),D=t.useRef(null),[U]=t.useState((()=>new r.Vector3)),[M]=t.useState((()=>new r.Object3D)),[_]=t.useState((()=>new r.Quaternion)),[V]=t.useState((()=>new r.Vector3)),{invalidate:j}=x.useThree();t.useEffect((()=>{var y;null==(y=A.current)||y.geometry.setIndex(c.TRIANGULATION)}),[]);const[I]=t.useState((()=>new r.Vector3));t.useEffect((()=>{var e,x;const z=null==(e=A.current)?void 0:e.geometry;if(!z)return;var t,r;(z.setFromPoints(y),z.setDrawRange(0,c.TRIANGULATION.length),a)?(M.matrix.fromArray(a.data),M.matrix.decompose(M.position,M.quaternion,M.scale),M.rotation.y*=-1,M.rotation.z*=-1,_.setFromEuler(M.rotation),m?(M.position.y*=-1,M.position.z*=-1,null==(t=O.current)||t.position.copy(M.position.divideScalar(l))):null==(r=O.current)||r.position.set(0,0,0)):(o(y[f[0]],y[f[1]],y[f[2]],U),_.setFromUnitVectors(n,U));const s=_.clone().invert();if(z.computeBoundingBox(),E&&j(),z.center(),z.applyQuaternion(s),null==(x=k.current)||x.setRotationFromQuaternion(_),h)if(i){if(F.current&&D.current&&S.current)if(N){const y=F.current._computeSphere(z),e=D.current._computeSphere(z),x=(v=y.center,w=e.center,v.clone().add(w).multiplyScalar(.5));g=x.negate(),F.current._update(z,i,y),D.current._update(z,i,e)}else F.current._update(z,i),D.current._update(z,i)}else console.warn("Facemesh `eyes` option only works if `faceBlendshapes` is provided: skipping.");var v,w;if(S.current){if(void 0!==g)if("number"==typeof g){const y=z.getAttribute("position");V.set(-y.getX(g),-y.getY(g),-y.getZ(g))}else g.isVector3&&V.copy(g);else V.setScalar(0);S.current.position.copy(V)}if(L.current){let y=1;(p||u||d)&&(z.boundingBox.getSize(I),p&&(y=p/I.x),u&&(y=u/I.y),d&&(y=d/I.z)),L.current.scale.setScalar(1!==y?y:1)}z.computeVertexNormals(),z.attributes.position.needsUpdate=!0}),[y,a,i,M,m,l,p,u,d,f,g,h,E,j,U,_,I,V]);const T=t.useMemo((()=>({outerRef:k,meshRef:A,eyeRightRef:F,eyeLeftRef:D})),[]);t.useImperativeHandle(b,(()=>T),[T]);const[q]=t.useState((()=>new r.Vector3)),P=null==(R=A.current)?void 0:R.geometry.boundingBox,B=(null==P?void 0:P.getSize(q).z)||1;return t.createElement("group",w,t.createElement("group",{ref:O},t.createElement("group",{ref:k},t.createElement("group",{ref:L},E?t.createElement(t.Fragment,null,t.createElement("axesHelper",{args:[B]}),t.createElement(z.Line,{points:[[0,0,0],[0,0,-B]],color:65535})):null,t.createElement("group",{ref:S},h&&i&&t.createElement("group",{name:"eyes"},t.createElement(s,{side:"left",ref:F,debug:E}),t.createElement(s,{side:"right",ref:D,debug:E})),t.createElement("mesh",{ref:A,name:"face"},v,E?t.createElement(t.Fragment,null,P&&t.createElement("box3Helper",{args:[P]})):null))))))})),m={contourLandmarks:{right:[33,133,159,145,153],left:[263,362,386,374,380]},blendshapes:{right:[14,16,18,12],left:[13,15,17,11]},color:{right:"red",left:"#00f
|