@jscad/regl-renderer 3.0.1-alpha.0 → 3.0.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.0.2-alpha.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@3.0.1-alpha.0...@jscad/regl-renderer@3.0.2-alpha.0) (2025-09-06)
7
+
8
+ **Note:** Version bump only for package @jscad/regl-renderer
9
+
6
10
  ## [3.0.1-alpha.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.6.3...@jscad/regl-renderer@3.0.1-alpha.0) (2025-01-03)
7
11
 
8
12
  ### Bug Fixes
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Renderer for JSCAD Geometries
3
3
  * @module @jscad/regl-renderer
4
- * @version 3.0.1-alpha.0
4
+ * @version 3.0.2-alpha.0
5
5
  * @license MIT
6
6
  */
7
7
  "undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var create_1$1=function(){var out=new Float32Array(3);return out[0]=0,out[1]=0,out[2]=0,out};var clone_1$1=function(a){var out=new Float32Array(3);return out[0]=a[0],out[1]=a[1],out[2]=a[2],out};var fromValues_1=function(x,y,z){var out=new Float32Array(3);return out[0]=x,out[1]=y,out[2]=z,out};var normalize_1=function(out,a){var x=a[0],y=a[1],z=a[2],len=x*x+y*y+z*z;len>0&&(len=1/Math.sqrt(len),out[0]=a[0]*len,out[1]=a[1]*len,out[2]=a[2]*len);return out};var dot_1=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};var angle_1=function(a,b){var tempA=fromValues(a[0],a[1],a[2]),tempB=fromValues(b[0],b[1],b[2]);normalize(tempA,tempA),normalize(tempB,tempB);var cosine=dot(tempA,tempB);return cosine>1?0:Math.acos(cosine)},fromValues=fromValues_1,normalize=normalize_1,dot=dot_1;var copy_1$1=function(out,a){return out[0]=a[0],out[1]=a[1],out[2]=a[2],out};var set_1=function(out,x,y,z){return out[0]=x,out[1]=y,out[2]=z,out};var equals_1=function(a,b){var a0=a[0],a1=a[1],a2=a[2],b0=b[0],b1=b[1],b2=b[2];return Math.abs(a0-b0)<=EPSILON*Math.max(1,Math.abs(a0),Math.abs(b0))&&Math.abs(a1-b1)<=EPSILON*Math.max(1,Math.abs(a1),Math.abs(b1))&&Math.abs(a2-b2)<=EPSILON*Math.max(1,Math.abs(a2),Math.abs(b2))},EPSILON=1e-6;var exactEquals_1=function(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]};var add_1=function(out,a,b){return out[0]=a[0]+b[0],out[1]=a[1]+b[1],out[2]=a[2]+b[2],out};var subtract_1=function(out,a,b){return out[0]=a[0]-b[0],out[1]=a[1]-b[1],out[2]=a[2]-b[2],out};var subExports={};({get exports(){return subExports},set exports(v){subExports=v}}).exports=subtract_1;var multiply_1$1=function(out,a,b){return out[0]=a[0]*b[0],out[1]=a[1]*b[1],out[2]=a[2]*b[2],out};var mulExports={};({get exports(){return mulExports},set exports(v){mulExports=v}}).exports=multiply_1$1;var divide_1=function(out,a,b){return out[0]=a[0]/b[0],out[1]=a[1]/b[1],out[2]=a[2]/b[2],out};var divExports={};({get exports(){return divExports},set exports(v){divExports=v}}).exports=divide_1;var min_1=function(out,a,b){return out[0]=Math.min(a[0],b[0]),out[1]=Math.min(a[1],b[1]),out[2]=Math.min(a[2],b[2]),out};var max_1=function(out,a,b){return out[0]=Math.max(a[0],b[0]),out[1]=Math.max(a[1],b[1]),out[2]=Math.max(a[2],b[2]),out};var floor_1=function(out,a){return out[0]=Math.floor(a[0]),out[1]=Math.floor(a[1]),out[2]=Math.floor(a[2]),out};var ceil_1=function(out,a){return out[0]=Math.ceil(a[0]),out[1]=Math.ceil(a[1]),out[2]=Math.ceil(a[2]),out};var round_1=function(out,a){return out[0]=Math.round(a[0]),out[1]=Math.round(a[1]),out[2]=Math.round(a[2]),out};var scale_1$1=function(out,a,b){return out[0]=a[0]*b,out[1]=a[1]*b,out[2]=a[2]*b,out};var scaleAndAdd_1=function(out,a,b,scale){return out[0]=a[0]+b[0]*scale,out[1]=a[1]+b[1]*scale,out[2]=a[2]+b[2]*scale,out};var distance_1=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return Math.sqrt(x*x+y*y+z*z)};var distExports={};({get exports(){return distExports},set exports(v){distExports=v}}).exports=distance_1;var squaredDistance_1=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return x*x+y*y+z*z};var sqrDistExports={};({get exports(){return sqrDistExports},set exports(v){sqrDistExports=v}}).exports=squaredDistance_1;var length_1=function(a){var x=a[0],y=a[1],z=a[2];return Math.sqrt(x*x+y*y+z*z)};var lenExports={};({get exports(){return lenExports},set exports(v){lenExports=v}}).exports=length_1;var squaredLength_1=function(a){var x=a[0],y=a[1],z=a[2];return x*x+y*y+z*z};var sqrLenExports={};({get exports(){return sqrLenExports},set exports(v){sqrLenExports=v}}).exports=squaredLength_1;var negate_1=function(out,a){return out[0]=-a[0],out[1]=-a[1],out[2]=-a[2],out};var inverse_1=function(out,a){return out[0]=1/a[0],out[1]=1/a[1],out[2]=1/a[2],out};var cross_1=function(out,a,b){var ax=a[0],ay=a[1],az=a[2],bx=b[0],by=b[1],bz=b[2];return out[0]=ay*bz-az*by,out[1]=az*bx-ax*bz,out[2]=ax*by-ay*bx,out};var lerp_1=function(out,a,b,t){var ax=a[0],ay=a[1],az=a[2];return out[0]=ax+t*(b[0]-ax),out[1]=ay+t*(b[1]-ay),out[2]=az+t*(b[2]-az),out};var random_1=function(out,scale){scale=scale||1;var r=2*Math.random()*Math.PI,z=2*Math.random()-1,zScale=Math.sqrt(1-z*z)*scale;return out[0]=Math.cos(r)*zScale,out[1]=Math.sin(r)*zScale,out[2]=z*scale,out};var transformMat4_1=function(out,a,m){var x=a[0],y=a[1],z=a[2],w=m[3]*x+m[7]*y+m[11]*z+m[15];return w=w||1,out[0]=(m[0]*x+m[4]*y+m[8]*z+m[12])/w,out[1]=(m[1]*x+m[5]*y+m[9]*z+m[13])/w,out[2]=(m[2]*x+m[6]*y+m[10]*z+m[14])/w,out};var transformMat3_1=function(out,a,m){var x=a[0],y=a[1],z=a[2];return out[0]=x*m[0]+y*m[3]+z*m[6],out[1]=x*m[1]+y*m[4]+z*m[7],out[2]=x*m[2]+y*m[5]+z*m[8],out};var transformQuat_1=function(out,a,q){var x=a[0],y=a[1],z=a[2],qx=q[0],qy=q[1],qz=q[2],qw=q[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;return out[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy,out[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz,out[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx,out};var rotateX_1$1=function(out,a,b,c){var by=b[1],bz=b[2],py=a[1]-by,pz=a[2]-bz,sc=Math.sin(c),cc=Math.cos(c);return out[0]=a[0],out[1]=by+py*cc-pz*sc,out[2]=bz+py*sc+pz*cc,out};var rotateY_1$1=function(out,a,b,c){var bx=b[0],bz=b[2],px=a[0]-bx,pz=a[2]-bz,sc=Math.sin(c),cc=Math.cos(c);return out[0]=bx+pz*sc+px*cc,out[1]=a[1],out[2]=bz+pz*cc-px*sc,out};var rotateZ_1$1=function(out,a,b,c){var bx=b[0],by=b[1],px=a[0]-bx,py=a[1]-by,sc=Math.sin(c),cc=Math.cos(c);return out[0]=bx+px*cc-py*sc,out[1]=by+px*sc+py*cc,out[2]=a[2],out};var forEach_1=function(a,stride,offset,count,fn,arg){var i,l;stride||(stride=3);offset||(offset=0);l=count?Math.min(count*stride+offset,a.length):a.length;for(i=offset;i<l;i+=stride)vec[0]=a[i],vec[1]=a[i+1],vec[2]=a[i+2],fn(vec,vec,arg),a[i]=vec[0],a[i+1]=vec[1],a[i+2]=vec[2];return a},vec=create_1$1();var glVec3={EPSILON:1e-6,create:create_1$1,clone:clone_1$1,angle:angle_1,fromValues:fromValues_1,copy:copy_1$1,set:set_1,equals:equals_1,exactEquals:exactEquals_1,add:add_1,subtract:subtract_1,sub:subExports,multiply:multiply_1$1,mul:mulExports,divide:divide_1,div:divExports,min:min_1,max:max_1,floor:floor_1,ceil:ceil_1,round:round_1,scale:scale_1$1,scaleAndAdd:scaleAndAdd_1,distance:distance_1,dist:distExports,squaredDistance:squaredDistance_1,sqrDist:sqrDistExports,length:length_1,len:lenExports,squaredLength:squaredLength_1,sqrLen:sqrLenExports,negate:negate_1,inverse:inverse_1,normalize:normalize_1,dot:dot_1,cross:cross_1,lerp:lerp_1,random:random_1,transformMat4:transformMat4_1,transformMat3:transformMat3_1,transformQuat:transformQuat_1,rotateX:rotateX_1$1,rotateY:rotateY_1$1,rotateZ:rotateZ_1$1,forEach:forEach_1};var identity_1=function(out){return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out};var rotate_1=function(out,a,rad,axis){var s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22,x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z);if(Math.abs(len)<1e-6)return null;len=1/len,x*=len,y*=len,z*=len,s=Math.sin(rad),c=Math.cos(rad),t=1-c,a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],b00=x*x*t+c,b01=y*x*t+z*s,b02=z*x*t-y*s,b10=x*y*t-z*s,b11=y*y*t+c,b12=z*y*t+x*s,b20=x*z*t+y*s,b21=y*z*t-x*s,b22=z*z*t+c,out[0]=a00*b00+a10*b01+a20*b02,out[1]=a01*b00+a11*b01+a21*b02,out[2]=a02*b00+a12*b01+a22*b02,out[3]=a03*b00+a13*b01+a23*b02,out[4]=a00*b10+a10*b11+a20*b12,out[5]=a01*b10+a11*b11+a21*b12,out[6]=a02*b10+a12*b11+a22*b12,out[7]=a03*b10+a13*b11+a23*b12,out[8]=a00*b20+a10*b21+a20*b22,out[9]=a01*b20+a11*b21+a21*b22,out[10]=a02*b20+a12*b21+a22*b22,out[11]=a03*b20+a13*b21+a23*b22,a!==out&&(out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out};var fromRotation_1=function(out,rad,axis){var s,c,t,x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z);if(Math.abs(len)<1e-6)return null;return len=1/len,x*=len,y*=len,z*=len,s=Math.sin(rad),c=Math.cos(rad),t=1-c,out[0]=x*x*t+c,out[1]=y*x*t+z*s,out[2]=z*x*t-y*s,out[3]=0,out[4]=x*y*t-z*s,out[5]=y*y*t+c,out[6]=z*y*t+x*s,out[7]=0,out[8]=x*z*t+y*s,out[9]=y*z*t-x*s,out[10]=z*z*t+c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out};var identity=identity_1,lookAt_1=function(out,eye,center,up){var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(Math.abs(eyex-centerx)<1e-6&&Math.abs(eyey-centery)<1e-6&&Math.abs(eyez-centerz)<1e-6)return identity(out);z0=eyex-centerx,z1=eyey-centery,z2=eyez-centerz,len=1/Math.sqrt(z0*z0+z1*z1+z2*z2),z0*=len,z1*=len,z2*=len,x0=upy*z2-upz*z1,x1=upz*z0-upx*z2,x2=upx*z1-upy*z0,len=Math.sqrt(x0*x0+x1*x1+x2*x2),len?(x0*=len=1/len,x1*=len,x2*=len):(x0=0,x1=0,x2=0);y0=z1*x2-z2*x1,y1=z2*x0-z0*x2,y2=z0*x1-z1*x0,len=Math.sqrt(y0*y0+y1*y1+y2*y2),len?(y0*=len=1/len,y1*=len,y2*=len):(y0=0,y1=0,y2=0);return out[0]=x0,out[1]=y0,out[2]=z0,out[3]=0,out[4]=x1,out[5]=y1,out[6]=z1,out[7]=0,out[8]=x2,out[9]=y2,out[10]=z2,out[11]=0,out[12]=-(x0*eyex+x1*eyey+x2*eyez),out[13]=-(y0*eyex+y1*eyey+y2*eyez),out[14]=-(z0*eyex+z1*eyey+z2*eyez),out[15]=1,out};var glMat4={create:function(){var out=new Float32Array(16);return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},clone:function(a){var out=new Float32Array(16);return out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},copy:function(out,a){return out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},identity:identity_1,transpose:function(out,a){if(out===a){var a01=a[1],a02=a[2],a03=a[3],a12=a[6],a13=a[7],a23=a[11];out[1]=a[4],out[2]=a[8],out[3]=a[12],out[4]=a01,out[6]=a[9],out[7]=a[13],out[8]=a02,out[9]=a12,out[11]=a[14],out[12]=a03,out[13]=a13,out[14]=a23}else out[0]=a[0],out[1]=a[4],out[2]=a[8],out[3]=a[12],out[4]=a[1],out[5]=a[5],out[6]=a[9],out[7]=a[13],out[8]=a[2],out[9]=a[6],out[10]=a[10],out[11]=a[14],out[12]=a[3],out[13]=a[7],out[14]=a[11],out[15]=a[15];return out},invert:function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(!det)return null;return det=1/det,out[0]=(a11*b11-a12*b10+a13*b09)*det,out[1]=(a02*b10-a01*b11-a03*b09)*det,out[2]=(a31*b05-a32*b04+a33*b03)*det,out[3]=(a22*b04-a21*b05-a23*b03)*det,out[4]=(a12*b08-a10*b11-a13*b07)*det,out[5]=(a00*b11-a02*b08+a03*b07)*det,out[6]=(a32*b02-a30*b05-a33*b01)*det,out[7]=(a20*b05-a22*b02+a23*b01)*det,out[8]=(a10*b10-a11*b08+a13*b06)*det,out[9]=(a01*b08-a00*b10-a03*b06)*det,out[10]=(a30*b04-a31*b02+a33*b00)*det,out[11]=(a21*b02-a20*b04-a23*b00)*det,out[12]=(a11*b07-a10*b09-a12*b06)*det,out[13]=(a00*b09-a01*b07+a02*b06)*det,out[14]=(a31*b01-a30*b03-a32*b00)*det,out[15]=(a20*b03-a21*b01+a22*b00)*det,out},adjoint:function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];return out[0]=a11*(a22*a33-a23*a32)-a21*(a12*a33-a13*a32)+a31*(a12*a23-a13*a22),out[1]=-(a01*(a22*a33-a23*a32)-a21*(a02*a33-a03*a32)+a31*(a02*a23-a03*a22)),out[2]=a01*(a12*a33-a13*a32)-a11*(a02*a33-a03*a32)+a31*(a02*a13-a03*a12),out[3]=-(a01*(a12*a23-a13*a22)-a11*(a02*a23-a03*a22)+a21*(a02*a13-a03*a12)),out[4]=-(a10*(a22*a33-a23*a32)-a20*(a12*a33-a13*a32)+a30*(a12*a23-a13*a22)),out[5]=a00*(a22*a33-a23*a32)-a20*(a02*a33-a03*a32)+a30*(a02*a23-a03*a22),out[6]=-(a00*(a12*a33-a13*a32)-a10*(a02*a33-a03*a32)+a30*(a02*a13-a03*a12)),out[7]=a00*(a12*a23-a13*a22)-a10*(a02*a23-a03*a22)+a20*(a02*a13-a03*a12),out[8]=a10*(a21*a33-a23*a31)-a20*(a11*a33-a13*a31)+a30*(a11*a23-a13*a21),out[9]=-(a00*(a21*a33-a23*a31)-a20*(a01*a33-a03*a31)+a30*(a01*a23-a03*a21)),out[10]=a00*(a11*a33-a13*a31)-a10*(a01*a33-a03*a31)+a30*(a01*a13-a03*a11),out[11]=-(a00*(a11*a23-a13*a21)-a10*(a01*a23-a03*a21)+a20*(a01*a13-a03*a11)),out[12]=-(a10*(a21*a32-a22*a31)-a20*(a11*a32-a12*a31)+a30*(a11*a22-a12*a21)),out[13]=a00*(a21*a32-a22*a31)-a20*(a01*a32-a02*a31)+a30*(a01*a22-a02*a21),out[14]=-(a00*(a11*a32-a12*a31)-a10*(a01*a32-a02*a31)+a30*(a01*a12-a02*a11)),out[15]=a00*(a11*a22-a12*a21)-a10*(a01*a22-a02*a21)+a20*(a01*a12-a02*a11),out},determinant:function(a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];return(a00*a11-a01*a10)*(a22*a33-a23*a32)-(a00*a12-a02*a10)*(a21*a33-a23*a31)+(a00*a13-a03*a10)*(a21*a32-a22*a31)+(a01*a12-a02*a11)*(a20*a33-a23*a30)-(a01*a13-a03*a11)*(a20*a32-a22*a30)+(a02*a13-a03*a12)*(a20*a31-a21*a30)},multiply:function(out,a,b){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b0=b[0],b1=b[1],b2=b[2],b3=b[3];return out[0]=b0*a00+b1*a10+b2*a20+b3*a30,out[1]=b0*a01+b1*a11+b2*a21+b3*a31,out[2]=b0*a02+b1*a12+b2*a22+b3*a32,out[3]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[4],b1=b[5],b2=b[6],b3=b[7],out[4]=b0*a00+b1*a10+b2*a20+b3*a30,out[5]=b0*a01+b1*a11+b2*a21+b3*a31,out[6]=b0*a02+b1*a12+b2*a22+b3*a32,out[7]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[8],b1=b[9],b2=b[10],b3=b[11],out[8]=b0*a00+b1*a10+b2*a20+b3*a30,out[9]=b0*a01+b1*a11+b2*a21+b3*a31,out[10]=b0*a02+b1*a12+b2*a22+b3*a32,out[11]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[12],b1=b[13],b2=b[14],b3=b[15],out[12]=b0*a00+b1*a10+b2*a20+b3*a30,out[13]=b0*a01+b1*a11+b2*a21+b3*a31,out[14]=b0*a02+b1*a12+b2*a22+b3*a32,out[15]=b0*a03+b1*a13+b2*a23+b3*a33,out},translate:function(out,a,v){var a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,x=v[0],y=v[1],z=v[2];a===out?(out[12]=a[0]*x+a[4]*y+a[8]*z+a[12],out[13]=a[1]*x+a[5]*y+a[9]*z+a[13],out[14]=a[2]*x+a[6]*y+a[10]*z+a[14],out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]):(a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],out[0]=a00,out[1]=a01,out[2]=a02,out[3]=a03,out[4]=a10,out[5]=a11,out[6]=a12,out[7]=a13,out[8]=a20,out[9]=a21,out[10]=a22,out[11]=a23,out[12]=a00*x+a10*y+a20*z+a[12],out[13]=a01*x+a11*y+a21*z+a[13],out[14]=a02*x+a12*y+a22*z+a[14],out[15]=a03*x+a13*y+a23*z+a[15]);return out},scale:function(out,a,v){var x=v[0],y=v[1],z=v[2];return out[0]=a[0]*x,out[1]=a[1]*x,out[2]=a[2]*x,out[3]=a[3]*x,out[4]=a[4]*y,out[5]=a[5]*y,out[6]=a[6]*y,out[7]=a[7]*y,out[8]=a[8]*z,out[9]=a[9]*z,out[10]=a[10]*z,out[11]=a[11]*z,out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},rotate:rotate_1,rotateX:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11];a!==out&&(out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[4]=a10*c+a20*s,out[5]=a11*c+a21*s,out[6]=a12*c+a22*s,out[7]=a13*c+a23*s,out[8]=a20*c-a10*s,out[9]=a21*c-a11*s,out[10]=a22*c-a12*s,out[11]=a23*c-a13*s,out},rotateY:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a20=a[8],a21=a[9],a22=a[10],a23=a[11];a!==out&&(out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[0]=a00*c-a20*s,out[1]=a01*c-a21*s,out[2]=a02*c-a22*s,out[3]=a03*c-a23*s,out[8]=a00*s+a20*c,out[9]=a01*s+a21*c,out[10]=a02*s+a22*c,out[11]=a03*s+a23*c,out},rotateZ:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7];a!==out&&(out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[0]=a00*c+a10*s,out[1]=a01*c+a11*s,out[2]=a02*c+a12*s,out[3]=a03*c+a13*s,out[4]=a10*c-a00*s,out[5]=a11*c-a01*s,out[6]=a12*c-a02*s,out[7]=a13*c-a03*s,out},fromRotation:fromRotation_1,fromRotationTranslation:function(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-(yy+zz),out[1]=xy+wz,out[2]=xz-wy,out[3]=0,out[4]=xy-wz,out[5]=1-(xx+zz),out[6]=yz+wx,out[7]=0,out[8]=xz+wy,out[9]=yz-wx,out[10]=1-(xx+yy),out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out},fromScaling:function(out,v){return out[0]=v[0],out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=v[1],out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=v[2],out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromTranslation:function(out,v){return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out},fromXRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=c,out[6]=s,out[7]=0,out[8]=0,out[9]=-s,out[10]=c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromYRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=c,out[1]=0,out[2]=-s,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=s,out[9]=0,out[10]=c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromZRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=c,out[1]=s,out[2]=0,out[3]=0,out[4]=-s,out[5]=c,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromQuat:function(out,q){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,yx=y*x2,yy=y*y2,zx=z*x2,zy=z*y2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-yy-zz,out[1]=yx+wz,out[2]=zx-wy,out[3]=0,out[4]=yx-wz,out[5]=1-xx-zz,out[6]=zy+wx,out[7]=0,out[8]=zx+wy,out[9]=zy-wx,out[10]=1-xx-yy,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},frustum:function(out,left,right,bottom,top,near,far){var rl=1/(right-left),tb=1/(top-bottom),nf=1/(near-far);return out[0]=2*near*rl,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=2*near*tb,out[6]=0,out[7]=0,out[8]=(right+left)*rl,out[9]=(top+bottom)*tb,out[10]=(far+near)*nf,out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near*2*nf,out[15]=0,out},perspective:function(out,fovy,aspect,near,far){var f=1/Math.tan(fovy/2),nf=1/(near-far);return out[0]=f/aspect,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=f,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=(far+near)*nf,out[11]=-1,out[12]=0,out[13]=0,out[14]=2*far*near*nf,out[15]=0,out},perspectiveFromFieldOfView:function(out,fov,near,far){var upTan=Math.tan(fov.upDegrees*Math.PI/180),downTan=Math.tan(fov.downDegrees*Math.PI/180),leftTan=Math.tan(fov.leftDegrees*Math.PI/180),rightTan=Math.tan(fov.rightDegrees*Math.PI/180),xScale=2/(leftTan+rightTan),yScale=2/(upTan+downTan);return out[0]=xScale,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=yScale,out[6]=0,out[7]=0,out[8]=-(leftTan-rightTan)*xScale*.5,out[9]=(upTan-downTan)*yScale*.5,out[10]=far/(near-far),out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near/(near-far),out[15]=0,out},ortho:function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);return out[0]=-2*lr,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=-2*bt,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=2*nf,out[11]=0,out[12]=(left+right)*lr,out[13]=(top+bottom)*bt,out[14]=(far+near)*nf,out[15]=1,out},lookAt:lookAt_1,str:function(a){return"mat4("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+")"}};const cameraState$1={view:glMat4.identity(new Float32Array(16)),projection:glMat4.identity(new Float32Array(16)),matrix:glMat4.identity(new Float32Array(16)),near:1,far:1300,up:[0,0,1],eye:new Float32Array(3),position:[150,250,200],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],zoom:1,projectionType:"orthographic"},setProjection$1=(camera,input)=>{const{width:width,height:height}=input,aspect=width/height,viewport=[0,0,width,height],multiplier=camera.zoom,left=-width*multiplier,right=width*multiplier,bottom=-height*multiplier,top=height*multiplier;return{projection:glMat4.ortho([],left,right,bottom,top,camera.near,camera.far),aspect:aspect,viewport:viewport}};var orthographicCamera=Object.freeze({__proto__:null,cameraState:cameraState$1,cameraProps:{},setProjection:setProjection$1});const cameraState={view:glMat4.identity(new Float32Array(16)),projection:glMat4.identity(new Float32Array(16)),matrix:glMat4.identity(new Float32Array(16)),near:1,far:18e3,up:[0,0,1],eye:new Float32Array(3),position:[450,550,700],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],projectionType:"perspective"},cameraProps={},defaults$1=Object.assign({},cameraState,cameraProps),setProjection=(output,camera,input)=>{const aspect=input.width/input.height,projection=glMat4.perspective(glMat4.identity([]),camera.fov,aspect,camera.near,camera.far),viewport=[0,0,input.width,input.height],out=output||{};return out.projection=projection,out.aspect=aspect,out.viewport=viewport,out};var perspectiveCamera=Object.freeze({__proto__:null,cameraState:cameraState,cameraProps:cameraProps,defaults:defaults$1,setProjection:setProjection,update:(output,camera)=>{camera||(camera=output);const{position:position,target:target,up:up}=camera,offset=glVec3.subtract([],position,target),newPosition=glVec3.add(glVec3.create(),target,offset),newView=glMat4.lookAt(glMat4.create(),newPosition,target,up),out=output||{};return out.position=newPosition,out.view=newView,out}});var camera=Object.freeze({__proto__:null,fromOrthographicToPerspective:orthographicCamera=>{const{near:near,far:far,fov:fov}=orthographicCamera,{viewport:viewport}=orthographicCamera,projection=setProjection(orthographicCamera,{width:viewport[2],height:viewport[3]}),{projectionType:projectionType}=cameraState;return Object.assign({},orthographicCamera,projection,{projectionType:projectionType},{near:near,far:far,fov:fov})},fromPerspectiveToOrthographic:perspectiveCamera=>{const{fov:fov,aspect:aspect}=perspectiveCamera,distance=.3*glVec3.length(glVec3.subtract([],perspectiveCamera.position,perspectiveCamera.target)),width=Math.tan(fov)*distance*aspect,height=Math.tan(fov)*distance,{near:near,far:far,viewport:viewport}=perspectiveCamera,projectionType=cameraState$1.projectionType,projection=setProjection$1({zoom:1,near:near,far:far},{width:width,height:height});return Object.assign({},orthographicCamera,perspectiveCamera,projection,{projectionType:projectionType,viewport:viewport})},toPerspectiveView:({camera:camera})=>{const offsetToTarget=glVec3.distance(camera.position,camera.target),position=[offsetToTarget,offsetToTarget,offsetToTarget];return{view:glMat4.lookAt(glMat4.create(),position,camera.target,camera.up),position:position}},toPresetView:(viewName,{camera:camera})=>{const offsetToTarget=glVec3.distance(camera.position,camera.target),position=glVec3.add(glVec3.create(),{top:[0,-1e-6,1],bottom:[0,0,-1],front:[0,1,0],back:[0,-1,0],left:[-1,0,0],right:[1,0,0],undefined:[0,0,0]}[viewName].map((x=>x*offsetToTarget)),camera.target);return{view:glMat4.lookAt(glMat4.create(),position,camera.target,camera.up),position:position}}}),index$2=Object.freeze({__proto__:null,camera:camera,orthographic:orthographicCamera,perspective:perspectiveCamera});const makeDrawGrid=(regl,params={})=>{const positions=[],defaults={visuals:{color:[0,0,1,1],fadeOut:!1},ticks:1,size:[16,16],centered:!1,lineWidth:2},visuals=Object.assign({},defaults.visuals,params.visuals||{}),{fadeOut:fadeOut,color:color}=visuals,{size:size,ticks:ticks,centered:centered,lineWidth:lineWidth}=Object.assign({},defaults,params),width=size[0],length=size[1];if(centered){const halfWidth=.5*width,halfLength=.5*length,widthStart=-halfWidth+halfWidth%ticks,widthEnd=-widthStart,lengthStart=-halfLength+halfLength%ticks,lengthEnd=-lengthStart,skipEvery=0;for(let i=widthStart,j=0;i<=widthEnd;i+=ticks,j+=1)j%skipEvery!=0&&(positions.push(lengthStart,i,0),positions.push(lengthEnd,i,0),positions.push(lengthStart,i,0));for(let i=lengthStart,j=0;i<=lengthEnd;i+=ticks,j+=1)j%skipEvery!=0&&(positions.push(i,widthStart,0),positions.push(i,widthEnd,0),positions.push(i,widthStart,0))}else{for(let i=.5*-width;i<=.5*width;i+=ticks)positions.push(.5*-length,i,0),positions.push(.5*length,i,0),positions.push(.5*-length,i,0);for(let i=.5*-length;i<=.5*length;i+=ticks)positions.push(i,.5*-width,0),positions.push(i,.5*width,0),positions.push(i,.5*-width,0)}return regl({vert:"precision mediump float;\n\n uniform float camNear, camFar;\n uniform mat4 model, view, projection;\n\n attribute vec3 position;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n void main() {\n fragPosition = position;\n worldPosition = model * vec4(position, 1);\n vec4 glPosition = projection * view * worldPosition;\n gl_Position = glPosition;\n }",frag:"precision mediump float;\n uniform vec4 color;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n uniform vec4 fogColor;\n uniform bool fadeOut;\n void main() {\n float dist = .5;\n if(fadeOut){\n dist = distance( vec2(0.,0.), vec2(worldPosition.x, worldPosition.y));\n dist *= 0.0025;\n dist = sqrt(dist);\n }\n\n gl_FragColor = mix(color, fogColor, dist);\n }\n ",attributes:{position:regl.buffer(positions)},count:positions.length/3,uniforms:{model:(context,props)=>props&&props.model?props.model:glMat4.identity([]),color:(context,props)=>props&&props.color?props.color:color,fogColor:(context,props)=>props&&props.color?[props.color[0],props.color[1],props.color[2],0]:[color[0],color[1],color[2],0],fadeOut:(context,props)=>props&&void 0!==props.fadeOut?props.fadeOut:fadeOut},lineWidth:(context,props)=>Math.min(props&&props.lineWidth?props.lineWidth:lineWidth,regl.limits.lineWidthDims[1]),primitive:"lines",cull:{enable:!0,face:"front"},polygonOffset:{enable:!0,offset:{factor:1,units:10*Math.random()}},blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}})},meshColor=[0,.6,1,1];var renderDefaults=Object.freeze({__proto__:null,background:[1,1,1,1],meshColor:meshColor,lightColor:[1,1,1,1],lightDirection:[.2,.2,1],lightPosition:[100,200,100],ambientLightAmount:.3,diffuseLightAmount:.89,specularLightAmount:.16,materialShininess:8});var index$1=Object.freeze({__proto__:null,drawGrid:(regl,params)=>{const{size:size,ticks:ticks}=Object.assign({},{size:[50,50],ticks:[10,1]},params),drawMainGrid=makeDrawGrid(regl,{size:size,ticks:ticks[0]}),drawSubGrid=makeDrawGrid(regl,{size:size,ticks:ticks[1]});return props=>{drawMainGrid(props),drawSubGrid({color:props.subColor,fadeOut:props.fadeOut})}},drawAxis:(regl,params)=>{let{size:size,xColor:xColor,yColor:yColor,zColor:zColor,lineWidth:lineWidth,alwaysVisible:alwaysVisible}=Object.assign({},{xColor:[1,0,0,1],yColor:[0,1,0,1],zColor:[0,0,1,1],size:10,lineWidth:3,alwaysVisible:!0},params);lineWidth>regl.limits.lineWidthDims[1]&&(lineWidth=regl.limits.lineWidthDims[1]);const points=[0,0,0,size,0,0],commandParams={frag:"precision mediump float;\n uniform vec4 color;\n void main() {\n gl_FragColor = color;\n }",vert:"\n precision mediump float;\n attribute vec3 position;\n uniform mat4 model, view, projection;\n void main() {\n gl_Position = projection * view * model * vec4(position, 1);\n }",uniforms:{model:(context,props)=>props&&props.model?props.model:glMat4.identity([]),color:(context,props)=>props.color,angle:(contet,props)=>props.angle},attributes:{position:points},count:points.length/3,primitive:"line loop",lineWidth:lineWidth,depth:{enable:!alwaysVisible}},xAxisModel=glMat4.identity([]),yAxisModel=glMat4.rotateZ(glMat4.create(),glMat4.identity([]),Math.PI/2),zAxisModel=glMat4.rotateY(glMat4.create(),glMat4.identity([]),-Math.PI/2),single=regl(commandParams);return props=>{const defaults={model:glMat4.identity([])};return props=Object.assign({},defaults,props),single([{color:xColor,model:glMat4.multiply(glMat4.create(),props.model,xAxisModel)},{color:yColor,model:glMat4.multiply(glMat4.create(),props.model,yAxisModel)},{color:zColor,model:glMat4.multiply(glMat4.create(),props.model,zAxisModel)}])}},drawMesh:(regl,params={extras:{}})=>{const defaults={useVertexColors:!0,dynamicCulling:!0,geometry:void 0,color:meshColor,visuals:{}},{geometry:geometry,dynamicCulling:dynamicCulling,useVertexColors:useVertexColors,color:color,visuals:visuals}=Object.assign({},defaults,params),ambientOcclusion=regl.buffer([]),hasIndices=!!(geometry.indices&&geometry.indices.length>0),hasNormals=!!(geometry.normals&&geometry.normals.length>0),transparent="transparent"in visuals&&visuals.transparent,hasVertexColors=!!(useVertexColors&&geometry.colors&&geometry.colors.length>0),transforms=geometry.transforms||glMat4.create(),flip=glMat4.determinant(transforms)<0,cullFace=dynamicCulling&&flip?"front":"back",vert=hasVertexColors?"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection, unormal;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nattribute float ao;\nvarying float ambientAo;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n surfacePosition = (unormal * vec4(position, 1.0)).xyz;\n surfaceNormal = normalize((unormal * vec4(normal, 1.0)).xyz); //vec4 transformedNormal = uNormalMatrix * vec4(aVertexNormal, 1.0);\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n //gl_Position = projection * view * worldSpacePosition;\n\n vColor = color;\n\n //ambientAo = (1. - ao) * (0.5 * max(normal.x, 0.) + 0.5);\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n //gl_Position = zBufferAdjust(glPosition, camNear, camFar);\n}\n":"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\nvoid main() {\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",frag=hasVertexColors?"\nprecision mediump float;\nvarying vec3 surfaceNormal, surfacePosition;\n\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform float specularLightAmount;\n\nuniform vec3 lightDirection;\nuniform vec4 lightColor;\nuniform vec3 opacity;\nuniform float uMaterialShininess;\n\nvarying vec4 vColor;\nuniform vec4 ucolor;\nuniform float vColorToggler;\n\nuniform vec2 printableArea;\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);//vec4(0.15, 0.15, 0.15, 0.3);\nvarying vec4 _worldSpacePosition;\nvarying float ambientAo;\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n vec4 endColor = vColor * vColorToggler + ucolor * (1.0 - vColorToggler);\n\n vec3 ambient = ambientLightAmount * endColor.rgb ; //ambientAo * \n\n float diffuseWeight = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(diffuseWeight , 0.0, 1.0 );\n\n //specular\n \n vec4 specularColor = vec4(lightColor);\n vec3 eyeDirection = normalize(surfacePosition.xyz);\n vec3 reflectionDirection = reflect(-lightDirection, -surfaceNormal);\n float specularLightWeight = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);\n vec3 specular = specularColor.rgb * specularLightWeight * specularLightAmount;\n\n gl_FragColor = vec4((ambient + diffuse + specular), endColor.a);\n}\n":"\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}",modelMatrixInv=glMat4.invert(glMat4.create(),transforms);let commandParams={primitive:"triangles",vert:vert,frag:frag,uniforms:{model:(context,props)=>transforms,ucolor:(context,props)=>props&&props.color?props.color:color,vColorToggler:(context,props)=>props&&props.useVertexColors&&!0===props.useVertexColors?1:0,unormal:(context,props)=>{const modelViewMatrix=glMat4.invert(glMat4.create(),props.camera.view);return glMat4.multiply(modelViewMatrix,modelMatrixInv,modelViewMatrix),glMat4.transpose(modelViewMatrix,modelViewMatrix),modelViewMatrix}},attributes:{position:regl.buffer({usage:"static",type:"float",data:geometry.positions}),ao:ambientOcclusion},cull:{enable:!0,face:cullFace}};return transparent&&(commandParams.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),geometry.cells?commandParams.elements=geometry.cells:hasIndices?commandParams.elements=regl.elements({usage:"static",type:"uint16",data:geometry.indices}):geometry.triangles?commandParams.elements=geometry.triangles:commandParams.count=geometry.positions.length/3,hasNormals&&(commandParams.attributes.normal=regl.buffer({usage:"static",type:"float",data:geometry.normals})),hasVertexColors&&(commandParams.attributes.color=regl.buffer({usage:"static",type:"float",data:geometry.colors})),commandParams=Object.assign({},commandParams,params.extras),regl(commandParams)},drawLines:(regl,params={})=>{const defaults={color:meshColor,geometry:void 0};let{geometry:geometry,color:color,transparent:transparent}=Object.assign({},defaults,params);"color"in geometry&&(color=geometry.color);const hasIndices=!!(geometry.indices&&geometry.indices.length>0),hasNormals=!!(geometry.normals&&geometry.normals.length>0),hasVertexColors=!!(geometry.colors&&geometry.colors.length>0),commandParams={primitive:"lines",vert:hasVertexColors?"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n vColor = color;\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n":"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\n\nvoid main() {\n\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",frag:hasVertexColors?"\nprecision mediump float;\nvarying vec4 vColor;\n\nvoid main () {\n gl_FragColor = vColor;\n}\n":"\nprecision mediump float;\nuniform vec4 ucolor;\n\nvoid main () {\n gl_FragColor = ucolor;\n}\n",uniforms:{model:(context,props)=>props.model||geometry.transforms||glMat4.create(),ucolor:(context,props)=>props&&props.color?props.color:color},attributes:{position:regl.buffer({usage:"static",type:"float",data:geometry.positions})}};return transparent&&(commandParams.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),hasVertexColors&&(commandParams.attributes.color=regl.buffer({usage:"static",type:"float",data:geometry.colors})),hasIndices&&(commandParams.elements=regl.elements({usage:"static",type:"uint16",data:geometry.indices})),hasNormals&&(commandParams.attributes.normal=regl.buffer({usage:"static",type:"float",data:geometry.normals})),regl(commandParams)}}),projectMat4=function(out,vec,m){var x=vec[0],y=vec[1],z=vec[2],a00=m[0],a01=m[1],a02=m[2],a03=m[3],a10=m[4],a11=m[5],a12=m[6],a13=m[7],a20=m[8],a21=m[9],a22=m[10],a23=m[11],a30=m[12],a31=m[13],a32=m[14],a33=m[15],lw=1/(x*a03+y*a13+z*a23+a33);return out[0]=(x*a00+y*a10+z*a20+a30)*lw,out[1]=(x*a01+y*a11+z*a21+a31)*lw,out[2]=(x*a02+y*a12+z*a22+a32)*lw,out};var transform=projectMat4,cameraUnproject=function(out,vec,viewport,invProjectionView){var viewX=viewport[0],viewY=viewport[1],viewWidth=viewport[2],viewHeight=viewport[3],x=vec[0],y=vec[1],z=vec[2];return x-=viewX,y=viewHeight-y-1,y-=viewY,out[0]=2*x/viewWidth-1,out[1]=2*y/viewHeight-1,out[2]=2*z-1,transform(out,out,invProjectionView)}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Renderer for JSCAD Geometries
3
3
  * @module @jscad/regl-renderer
4
- * @version 3.0.1-alpha.0
4
+ * @version 3.0.2-alpha.0
5
5
  * @license MIT
6
6
  */
7
7
  !function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).jscadReglRenderer={})}(this,(function(exports){"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var create_1$1=function(){var out=new Float32Array(3);return out[0]=0,out[1]=0,out[2]=0,out};var clone_1$1=function(a){var out=new Float32Array(3);return out[0]=a[0],out[1]=a[1],out[2]=a[2],out};var fromValues_1=function(x,y,z){var out=new Float32Array(3);return out[0]=x,out[1]=y,out[2]=z,out};var normalize_1=function(out,a){var x=a[0],y=a[1],z=a[2],len=x*x+y*y+z*z;len>0&&(len=1/Math.sqrt(len),out[0]=a[0]*len,out[1]=a[1]*len,out[2]=a[2]*len);return out};var dot_1=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};var angle_1=function(a,b){var tempA=fromValues(a[0],a[1],a[2]),tempB=fromValues(b[0],b[1],b[2]);normalize(tempA,tempA),normalize(tempB,tempB);var cosine=dot(tempA,tempB);return cosine>1?0:Math.acos(cosine)},fromValues=fromValues_1,normalize=normalize_1,dot=dot_1;var copy_1$1=function(out,a){return out[0]=a[0],out[1]=a[1],out[2]=a[2],out};var set_1=function(out,x,y,z){return out[0]=x,out[1]=y,out[2]=z,out};var equals_1=function(a,b){var a0=a[0],a1=a[1],a2=a[2],b0=b[0],b1=b[1],b2=b[2];return Math.abs(a0-b0)<=EPSILON*Math.max(1,Math.abs(a0),Math.abs(b0))&&Math.abs(a1-b1)<=EPSILON*Math.max(1,Math.abs(a1),Math.abs(b1))&&Math.abs(a2-b2)<=EPSILON*Math.max(1,Math.abs(a2),Math.abs(b2))},EPSILON=1e-6;var exactEquals_1=function(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]};var add_1=function(out,a,b){return out[0]=a[0]+b[0],out[1]=a[1]+b[1],out[2]=a[2]+b[2],out};var subtract_1=function(out,a,b){return out[0]=a[0]-b[0],out[1]=a[1]-b[1],out[2]=a[2]-b[2],out};var subExports={};!function(module){module.exports=subtract_1}({get exports(){return subExports},set exports(v){subExports=v}});var multiply_1$1=function(out,a,b){return out[0]=a[0]*b[0],out[1]=a[1]*b[1],out[2]=a[2]*b[2],out};var mulExports={};!function(module){module.exports=multiply_1$1}({get exports(){return mulExports},set exports(v){mulExports=v}});var divide_1=function(out,a,b){return out[0]=a[0]/b[0],out[1]=a[1]/b[1],out[2]=a[2]/b[2],out};var divExports={};!function(module){module.exports=divide_1}({get exports(){return divExports},set exports(v){divExports=v}});var min_1=function(out,a,b){return out[0]=Math.min(a[0],b[0]),out[1]=Math.min(a[1],b[1]),out[2]=Math.min(a[2],b[2]),out};var max_1=function(out,a,b){return out[0]=Math.max(a[0],b[0]),out[1]=Math.max(a[1],b[1]),out[2]=Math.max(a[2],b[2]),out};var floor_1=function(out,a){return out[0]=Math.floor(a[0]),out[1]=Math.floor(a[1]),out[2]=Math.floor(a[2]),out};var ceil_1=function(out,a){return out[0]=Math.ceil(a[0]),out[1]=Math.ceil(a[1]),out[2]=Math.ceil(a[2]),out};var round_1=function(out,a){return out[0]=Math.round(a[0]),out[1]=Math.round(a[1]),out[2]=Math.round(a[2]),out};var scale_1$1=function(out,a,b){return out[0]=a[0]*b,out[1]=a[1]*b,out[2]=a[2]*b,out};var scaleAndAdd_1=function(out,a,b,scale){return out[0]=a[0]+b[0]*scale,out[1]=a[1]+b[1]*scale,out[2]=a[2]+b[2]*scale,out};var distance_1=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return Math.sqrt(x*x+y*y+z*z)};var distExports={};!function(module){module.exports=distance_1}({get exports(){return distExports},set exports(v){distExports=v}});var squaredDistance_1=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return x*x+y*y+z*z};var sqrDistExports={};!function(module){module.exports=squaredDistance_1}({get exports(){return sqrDistExports},set exports(v){sqrDistExports=v}});var length_1=function(a){var x=a[0],y=a[1],z=a[2];return Math.sqrt(x*x+y*y+z*z)};var lenExports={};!function(module){module.exports=length_1}({get exports(){return lenExports},set exports(v){lenExports=v}});var squaredLength_1=function(a){var x=a[0],y=a[1],z=a[2];return x*x+y*y+z*z};var sqrLenExports={};!function(module){module.exports=squaredLength_1}({get exports(){return sqrLenExports},set exports(v){sqrLenExports=v}});var negate_1=function(out,a){return out[0]=-a[0],out[1]=-a[1],out[2]=-a[2],out};var inverse_1=function(out,a){return out[0]=1/a[0],out[1]=1/a[1],out[2]=1/a[2],out};var cross_1=function(out,a,b){var ax=a[0],ay=a[1],az=a[2],bx=b[0],by=b[1],bz=b[2];return out[0]=ay*bz-az*by,out[1]=az*bx-ax*bz,out[2]=ax*by-ay*bx,out};var lerp_1=function(out,a,b,t){var ax=a[0],ay=a[1],az=a[2];return out[0]=ax+t*(b[0]-ax),out[1]=ay+t*(b[1]-ay),out[2]=az+t*(b[2]-az),out};var random_1=function(out,scale){scale=scale||1;var r=2*Math.random()*Math.PI,z=2*Math.random()-1,zScale=Math.sqrt(1-z*z)*scale;return out[0]=Math.cos(r)*zScale,out[1]=Math.sin(r)*zScale,out[2]=z*scale,out};var transformMat4_1=function(out,a,m){var x=a[0],y=a[1],z=a[2],w=m[3]*x+m[7]*y+m[11]*z+m[15];return w=w||1,out[0]=(m[0]*x+m[4]*y+m[8]*z+m[12])/w,out[1]=(m[1]*x+m[5]*y+m[9]*z+m[13])/w,out[2]=(m[2]*x+m[6]*y+m[10]*z+m[14])/w,out};var transformMat3_1=function(out,a,m){var x=a[0],y=a[1],z=a[2];return out[0]=x*m[0]+y*m[3]+z*m[6],out[1]=x*m[1]+y*m[4]+z*m[7],out[2]=x*m[2]+y*m[5]+z*m[8],out};var transformQuat_1=function(out,a,q){var x=a[0],y=a[1],z=a[2],qx=q[0],qy=q[1],qz=q[2],qw=q[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;return out[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy,out[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz,out[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx,out};var rotateX_1$1=function(out,a,b,c){var by=b[1],bz=b[2],py=a[1]-by,pz=a[2]-bz,sc=Math.sin(c),cc=Math.cos(c);return out[0]=a[0],out[1]=by+py*cc-pz*sc,out[2]=bz+py*sc+pz*cc,out};var rotateY_1$1=function(out,a,b,c){var bx=b[0],bz=b[2],px=a[0]-bx,pz=a[2]-bz,sc=Math.sin(c),cc=Math.cos(c);return out[0]=bx+pz*sc+px*cc,out[1]=a[1],out[2]=bz+pz*cc-px*sc,out};var rotateZ_1$1=function(out,a,b,c){var bx=b[0],by=b[1],px=a[0]-bx,py=a[1]-by,sc=Math.sin(c),cc=Math.cos(c);return out[0]=bx+px*cc-py*sc,out[1]=by+px*sc+py*cc,out[2]=a[2],out};var forEach_1=function(a,stride,offset,count,fn,arg){var i,l;stride||(stride=3);offset||(offset=0);l=count?Math.min(count*stride+offset,a.length):a.length;for(i=offset;i<l;i+=stride)vec[0]=a[i],vec[1]=a[i+1],vec[2]=a[i+2],fn(vec,vec,arg),a[i]=vec[0],a[i+1]=vec[1],a[i+2]=vec[2];return a},vec=create_1$1();var glVec3={EPSILON:1e-6,create:create_1$1,clone:clone_1$1,angle:angle_1,fromValues:fromValues_1,copy:copy_1$1,set:set_1,equals:equals_1,exactEquals:exactEquals_1,add:add_1,subtract:subtract_1,sub:subExports,multiply:multiply_1$1,mul:mulExports,divide:divide_1,div:divExports,min:min_1,max:max_1,floor:floor_1,ceil:ceil_1,round:round_1,scale:scale_1$1,scaleAndAdd:scaleAndAdd_1,distance:distance_1,dist:distExports,squaredDistance:squaredDistance_1,sqrDist:sqrDistExports,length:length_1,len:lenExports,squaredLength:squaredLength_1,sqrLen:sqrLenExports,negate:negate_1,inverse:inverse_1,normalize:normalize_1,dot:dot_1,cross:cross_1,lerp:lerp_1,random:random_1,transformMat4:transformMat4_1,transformMat3:transformMat3_1,transformQuat:transformQuat_1,rotateX:rotateX_1$1,rotateY:rotateY_1$1,rotateZ:rotateZ_1$1,forEach:forEach_1};var identity_1=function(out){return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out};var rotate_1=function(out,a,rad,axis){var s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22,x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z);if(Math.abs(len)<1e-6)return null;len=1/len,x*=len,y*=len,z*=len,s=Math.sin(rad),c=Math.cos(rad),t=1-c,a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],b00=x*x*t+c,b01=y*x*t+z*s,b02=z*x*t-y*s,b10=x*y*t-z*s,b11=y*y*t+c,b12=z*y*t+x*s,b20=x*z*t+y*s,b21=y*z*t-x*s,b22=z*z*t+c,out[0]=a00*b00+a10*b01+a20*b02,out[1]=a01*b00+a11*b01+a21*b02,out[2]=a02*b00+a12*b01+a22*b02,out[3]=a03*b00+a13*b01+a23*b02,out[4]=a00*b10+a10*b11+a20*b12,out[5]=a01*b10+a11*b11+a21*b12,out[6]=a02*b10+a12*b11+a22*b12,out[7]=a03*b10+a13*b11+a23*b12,out[8]=a00*b20+a10*b21+a20*b22,out[9]=a01*b20+a11*b21+a21*b22,out[10]=a02*b20+a12*b21+a22*b22,out[11]=a03*b20+a13*b21+a23*b22,a!==out&&(out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out};var fromRotation_1=function(out,rad,axis){var s,c,t,x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z);if(Math.abs(len)<1e-6)return null;return len=1/len,x*=len,y*=len,z*=len,s=Math.sin(rad),c=Math.cos(rad),t=1-c,out[0]=x*x*t+c,out[1]=y*x*t+z*s,out[2]=z*x*t-y*s,out[3]=0,out[4]=x*y*t-z*s,out[5]=y*y*t+c,out[6]=z*y*t+x*s,out[7]=0,out[8]=x*z*t+y*s,out[9]=y*z*t-x*s,out[10]=z*z*t+c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out};var identity=identity_1,lookAt_1=function(out,eye,center,up){var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(Math.abs(eyex-centerx)<1e-6&&Math.abs(eyey-centery)<1e-6&&Math.abs(eyez-centerz)<1e-6)return identity(out);z0=eyex-centerx,z1=eyey-centery,z2=eyez-centerz,len=1/Math.sqrt(z0*z0+z1*z1+z2*z2),z0*=len,z1*=len,z2*=len,x0=upy*z2-upz*z1,x1=upz*z0-upx*z2,x2=upx*z1-upy*z0,len=Math.sqrt(x0*x0+x1*x1+x2*x2),len?(x0*=len=1/len,x1*=len,x2*=len):(x0=0,x1=0,x2=0);y0=z1*x2-z2*x1,y1=z2*x0-z0*x2,y2=z0*x1-z1*x0,len=Math.sqrt(y0*y0+y1*y1+y2*y2),len?(y0*=len=1/len,y1*=len,y2*=len):(y0=0,y1=0,y2=0);return out[0]=x0,out[1]=y0,out[2]=z0,out[3]=0,out[4]=x1,out[5]=y1,out[6]=z1,out[7]=0,out[8]=x2,out[9]=y2,out[10]=z2,out[11]=0,out[12]=-(x0*eyex+x1*eyey+x2*eyez),out[13]=-(y0*eyex+y1*eyey+y2*eyez),out[14]=-(z0*eyex+z1*eyey+z2*eyez),out[15]=1,out};var glMat4={create:function(){var out=new Float32Array(16);return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},clone:function(a){var out=new Float32Array(16);return out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},copy:function(out,a){return out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},identity:identity_1,transpose:function(out,a){if(out===a){var a01=a[1],a02=a[2],a03=a[3],a12=a[6],a13=a[7],a23=a[11];out[1]=a[4],out[2]=a[8],out[3]=a[12],out[4]=a01,out[6]=a[9],out[7]=a[13],out[8]=a02,out[9]=a12,out[11]=a[14],out[12]=a03,out[13]=a13,out[14]=a23}else out[0]=a[0],out[1]=a[4],out[2]=a[8],out[3]=a[12],out[4]=a[1],out[5]=a[5],out[6]=a[9],out[7]=a[13],out[8]=a[2],out[9]=a[6],out[10]=a[10],out[11]=a[14],out[12]=a[3],out[13]=a[7],out[14]=a[11],out[15]=a[15];return out},invert:function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(!det)return null;return det=1/det,out[0]=(a11*b11-a12*b10+a13*b09)*det,out[1]=(a02*b10-a01*b11-a03*b09)*det,out[2]=(a31*b05-a32*b04+a33*b03)*det,out[3]=(a22*b04-a21*b05-a23*b03)*det,out[4]=(a12*b08-a10*b11-a13*b07)*det,out[5]=(a00*b11-a02*b08+a03*b07)*det,out[6]=(a32*b02-a30*b05-a33*b01)*det,out[7]=(a20*b05-a22*b02+a23*b01)*det,out[8]=(a10*b10-a11*b08+a13*b06)*det,out[9]=(a01*b08-a00*b10-a03*b06)*det,out[10]=(a30*b04-a31*b02+a33*b00)*det,out[11]=(a21*b02-a20*b04-a23*b00)*det,out[12]=(a11*b07-a10*b09-a12*b06)*det,out[13]=(a00*b09-a01*b07+a02*b06)*det,out[14]=(a31*b01-a30*b03-a32*b00)*det,out[15]=(a20*b03-a21*b01+a22*b00)*det,out},adjoint:function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];return out[0]=a11*(a22*a33-a23*a32)-a21*(a12*a33-a13*a32)+a31*(a12*a23-a13*a22),out[1]=-(a01*(a22*a33-a23*a32)-a21*(a02*a33-a03*a32)+a31*(a02*a23-a03*a22)),out[2]=a01*(a12*a33-a13*a32)-a11*(a02*a33-a03*a32)+a31*(a02*a13-a03*a12),out[3]=-(a01*(a12*a23-a13*a22)-a11*(a02*a23-a03*a22)+a21*(a02*a13-a03*a12)),out[4]=-(a10*(a22*a33-a23*a32)-a20*(a12*a33-a13*a32)+a30*(a12*a23-a13*a22)),out[5]=a00*(a22*a33-a23*a32)-a20*(a02*a33-a03*a32)+a30*(a02*a23-a03*a22),out[6]=-(a00*(a12*a33-a13*a32)-a10*(a02*a33-a03*a32)+a30*(a02*a13-a03*a12)),out[7]=a00*(a12*a23-a13*a22)-a10*(a02*a23-a03*a22)+a20*(a02*a13-a03*a12),out[8]=a10*(a21*a33-a23*a31)-a20*(a11*a33-a13*a31)+a30*(a11*a23-a13*a21),out[9]=-(a00*(a21*a33-a23*a31)-a20*(a01*a33-a03*a31)+a30*(a01*a23-a03*a21)),out[10]=a00*(a11*a33-a13*a31)-a10*(a01*a33-a03*a31)+a30*(a01*a13-a03*a11),out[11]=-(a00*(a11*a23-a13*a21)-a10*(a01*a23-a03*a21)+a20*(a01*a13-a03*a11)),out[12]=-(a10*(a21*a32-a22*a31)-a20*(a11*a32-a12*a31)+a30*(a11*a22-a12*a21)),out[13]=a00*(a21*a32-a22*a31)-a20*(a01*a32-a02*a31)+a30*(a01*a22-a02*a21),out[14]=-(a00*(a11*a32-a12*a31)-a10*(a01*a32-a02*a31)+a30*(a01*a12-a02*a11)),out[15]=a00*(a11*a22-a12*a21)-a10*(a01*a22-a02*a21)+a20*(a01*a12-a02*a11),out},determinant:function(a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];return(a00*a11-a01*a10)*(a22*a33-a23*a32)-(a00*a12-a02*a10)*(a21*a33-a23*a31)+(a00*a13-a03*a10)*(a21*a32-a22*a31)+(a01*a12-a02*a11)*(a20*a33-a23*a30)-(a01*a13-a03*a11)*(a20*a32-a22*a30)+(a02*a13-a03*a12)*(a20*a31-a21*a30)},multiply:function(out,a,b){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b0=b[0],b1=b[1],b2=b[2],b3=b[3];return out[0]=b0*a00+b1*a10+b2*a20+b3*a30,out[1]=b0*a01+b1*a11+b2*a21+b3*a31,out[2]=b0*a02+b1*a12+b2*a22+b3*a32,out[3]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[4],b1=b[5],b2=b[6],b3=b[7],out[4]=b0*a00+b1*a10+b2*a20+b3*a30,out[5]=b0*a01+b1*a11+b2*a21+b3*a31,out[6]=b0*a02+b1*a12+b2*a22+b3*a32,out[7]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[8],b1=b[9],b2=b[10],b3=b[11],out[8]=b0*a00+b1*a10+b2*a20+b3*a30,out[9]=b0*a01+b1*a11+b2*a21+b3*a31,out[10]=b0*a02+b1*a12+b2*a22+b3*a32,out[11]=b0*a03+b1*a13+b2*a23+b3*a33,b0=b[12],b1=b[13],b2=b[14],b3=b[15],out[12]=b0*a00+b1*a10+b2*a20+b3*a30,out[13]=b0*a01+b1*a11+b2*a21+b3*a31,out[14]=b0*a02+b1*a12+b2*a22+b3*a32,out[15]=b0*a03+b1*a13+b2*a23+b3*a33,out},translate:function(out,a,v){var a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,x=v[0],y=v[1],z=v[2];a===out?(out[12]=a[0]*x+a[4]*y+a[8]*z+a[12],out[13]=a[1]*x+a[5]*y+a[9]*z+a[13],out[14]=a[2]*x+a[6]*y+a[10]*z+a[14],out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]):(a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],out[0]=a00,out[1]=a01,out[2]=a02,out[3]=a03,out[4]=a10,out[5]=a11,out[6]=a12,out[7]=a13,out[8]=a20,out[9]=a21,out[10]=a22,out[11]=a23,out[12]=a00*x+a10*y+a20*z+a[12],out[13]=a01*x+a11*y+a21*z+a[13],out[14]=a02*x+a12*y+a22*z+a[14],out[15]=a03*x+a13*y+a23*z+a[15]);return out},scale:function(out,a,v){var x=v[0],y=v[1],z=v[2];return out[0]=a[0]*x,out[1]=a[1]*x,out[2]=a[2]*x,out[3]=a[3]*x,out[4]=a[4]*y,out[5]=a[5]*y,out[6]=a[6]*y,out[7]=a[7]*y,out[8]=a[8]*z,out[9]=a[9]*z,out[10]=a[10]*z,out[11]=a[11]*z,out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15],out},rotate:rotate_1,rotateX:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11];a!==out&&(out[0]=a[0],out[1]=a[1],out[2]=a[2],out[3]=a[3],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[4]=a10*c+a20*s,out[5]=a11*c+a21*s,out[6]=a12*c+a22*s,out[7]=a13*c+a23*s,out[8]=a20*c-a10*s,out[9]=a21*c-a11*s,out[10]=a22*c-a12*s,out[11]=a23*c-a13*s,out},rotateY:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a20=a[8],a21=a[9],a22=a[10],a23=a[11];a!==out&&(out[4]=a[4],out[5]=a[5],out[6]=a[6],out[7]=a[7],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[0]=a00*c-a20*s,out[1]=a01*c-a21*s,out[2]=a02*c-a22*s,out[3]=a03*c-a23*s,out[8]=a00*s+a20*c,out[9]=a01*s+a21*c,out[10]=a02*s+a22*c,out[11]=a03*s+a23*c,out},rotateZ:function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7];a!==out&&(out[8]=a[8],out[9]=a[9],out[10]=a[10],out[11]=a[11],out[12]=a[12],out[13]=a[13],out[14]=a[14],out[15]=a[15]);return out[0]=a00*c+a10*s,out[1]=a01*c+a11*s,out[2]=a02*c+a12*s,out[3]=a03*c+a13*s,out[4]=a10*c-a00*s,out[5]=a11*c-a01*s,out[6]=a12*c-a02*s,out[7]=a13*c-a03*s,out},fromRotation:fromRotation_1,fromRotationTranslation:function(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-(yy+zz),out[1]=xy+wz,out[2]=xz-wy,out[3]=0,out[4]=xy-wz,out[5]=1-(xx+zz),out[6]=yz+wx,out[7]=0,out[8]=xz+wy,out[9]=yz-wx,out[10]=1-(xx+yy),out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out},fromScaling:function(out,v){return out[0]=v[0],out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=v[1],out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=v[2],out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromTranslation:function(out,v){return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out},fromXRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=1,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=c,out[6]=s,out[7]=0,out[8]=0,out[9]=-s,out[10]=c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromYRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=c,out[1]=0,out[2]=-s,out[3]=0,out[4]=0,out[5]=1,out[6]=0,out[7]=0,out[8]=s,out[9]=0,out[10]=c,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromZRotation:function(out,rad){var s=Math.sin(rad),c=Math.cos(rad);return out[0]=c,out[1]=s,out[2]=0,out[3]=0,out[4]=-s,out[5]=c,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=1,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},fromQuat:function(out,q){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,yx=y*x2,yy=y*y2,zx=z*x2,zy=z*y2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-yy-zz,out[1]=yx+wz,out[2]=zx-wy,out[3]=0,out[4]=yx-wz,out[5]=1-xx-zz,out[6]=zy+wx,out[7]=0,out[8]=zx+wy,out[9]=zy-wx,out[10]=1-xx-yy,out[11]=0,out[12]=0,out[13]=0,out[14]=0,out[15]=1,out},frustum:function(out,left,right,bottom,top,near,far){var rl=1/(right-left),tb=1/(top-bottom),nf=1/(near-far);return out[0]=2*near*rl,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=2*near*tb,out[6]=0,out[7]=0,out[8]=(right+left)*rl,out[9]=(top+bottom)*tb,out[10]=(far+near)*nf,out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near*2*nf,out[15]=0,out},perspective:function(out,fovy,aspect,near,far){var f=1/Math.tan(fovy/2),nf=1/(near-far);return out[0]=f/aspect,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=f,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=(far+near)*nf,out[11]=-1,out[12]=0,out[13]=0,out[14]=2*far*near*nf,out[15]=0,out},perspectiveFromFieldOfView:function(out,fov,near,far){var upTan=Math.tan(fov.upDegrees*Math.PI/180),downTan=Math.tan(fov.downDegrees*Math.PI/180),leftTan=Math.tan(fov.leftDegrees*Math.PI/180),rightTan=Math.tan(fov.rightDegrees*Math.PI/180),xScale=2/(leftTan+rightTan),yScale=2/(upTan+downTan);return out[0]=xScale,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=yScale,out[6]=0,out[7]=0,out[8]=-(leftTan-rightTan)*xScale*.5,out[9]=(upTan-downTan)*yScale*.5,out[10]=far/(near-far),out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near/(near-far),out[15]=0,out},ortho:function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);return out[0]=-2*lr,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=-2*bt,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=2*nf,out[11]=0,out[12]=(left+right)*lr,out[13]=(top+bottom)*bt,out[14]=(far+near)*nf,out[15]=1,out},lookAt:lookAt_1,str:function(a){return"mat4("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+")"}};const cameraState$1={view:glMat4.identity(new Float32Array(16)),projection:glMat4.identity(new Float32Array(16)),matrix:glMat4.identity(new Float32Array(16)),near:1,far:1300,up:[0,0,1],eye:new Float32Array(3),position:[150,250,200],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],zoom:1,projectionType:"orthographic"},setProjection$1=(camera,input)=>{const{width:width,height:height}=input,aspect=width/height,viewport=[0,0,width,height],multiplier=camera.zoom,left=-width*multiplier,right=width*multiplier,bottom=-height*multiplier,top=height*multiplier;return{projection:glMat4.ortho([],left,right,bottom,top,camera.near,camera.far),aspect:aspect,viewport:viewport}};var orthographicCamera=Object.freeze({__proto__:null,cameraState:cameraState$1,cameraProps:{},setProjection:setProjection$1});const cameraState={view:glMat4.identity(new Float32Array(16)),projection:glMat4.identity(new Float32Array(16)),matrix:glMat4.identity(new Float32Array(16)),near:1,far:18e3,up:[0,0,1],eye:new Float32Array(3),position:[450,550,700],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],projectionType:"perspective"},cameraProps={},defaults$1=Object.assign({},cameraState,cameraProps),setProjection=(output,camera,input)=>{const aspect=input.width/input.height,projection=glMat4.perspective(glMat4.identity([]),camera.fov,aspect,camera.near,camera.far),viewport=[0,0,input.width,input.height],out=output||{};return out.projection=projection,out.aspect=aspect,out.viewport=viewport,out};var perspectiveCamera=Object.freeze({__proto__:null,cameraState:cameraState,cameraProps:cameraProps,defaults:defaults$1,setProjection:setProjection,update:(output,camera)=>{camera||(camera=output);const{position:position,target:target,up:up}=camera,offset=glVec3.subtract([],position,target),newPosition=glVec3.add(glVec3.create(),target,offset),newView=glMat4.lookAt(glMat4.create(),newPosition,target,up),out=output||{};return out.position=newPosition,out.view=newView,out}});var camera=Object.freeze({__proto__:null,fromOrthographicToPerspective:orthographicCamera=>{const{near:near,far:far,fov:fov}=orthographicCamera,{viewport:viewport}=orthographicCamera,projection=setProjection(orthographicCamera,{width:viewport[2],height:viewport[3]}),{projectionType:projectionType}=cameraState;return Object.assign({},orthographicCamera,projection,{projectionType:projectionType},{near:near,far:far,fov:fov})},fromPerspectiveToOrthographic:perspectiveCamera=>{const{fov:fov,aspect:aspect}=perspectiveCamera,distance=.3*glVec3.length(glVec3.subtract([],perspectiveCamera.position,perspectiveCamera.target)),width=Math.tan(fov)*distance*aspect,height=Math.tan(fov)*distance,{near:near,far:far,viewport:viewport}=perspectiveCamera,projectionType=cameraState$1.projectionType,projection=setProjection$1({zoom:1,near:near,far:far},{width:width,height:height});return Object.assign({},orthographicCamera,perspectiveCamera,projection,{projectionType:projectionType,viewport:viewport})},toPerspectiveView:({camera:camera})=>{const offsetToTarget=glVec3.distance(camera.position,camera.target),position=[offsetToTarget,offsetToTarget,offsetToTarget];return{view:glMat4.lookAt(glMat4.create(),position,camera.target,camera.up),position:position}},toPresetView:(viewName,{camera:camera})=>{const offsetToTarget=glVec3.distance(camera.position,camera.target),position=glVec3.add(glVec3.create(),{top:[0,-1e-6,1],bottom:[0,0,-1],front:[0,1,0],back:[0,-1,0],left:[-1,0,0],right:[1,0,0],undefined:[0,0,0]}[viewName].map((x=>x*offsetToTarget)),camera.target);return{view:glMat4.lookAt(glMat4.create(),position,camera.target,camera.up),position:position}}}),index$2=Object.freeze({__proto__:null,camera:camera,orthographic:orthographicCamera,perspective:perspectiveCamera});const makeDrawGrid=(regl,params={})=>{const positions=[],defaults={visuals:{color:[0,0,1,1],fadeOut:!1},ticks:1,size:[16,16],centered:!1,lineWidth:2},visuals=Object.assign({},defaults.visuals,params.visuals||{}),{fadeOut:fadeOut,color:color}=visuals,{size:size,ticks:ticks,centered:centered,lineWidth:lineWidth}=Object.assign({},defaults,params),width=size[0],length=size[1];if(centered){const halfWidth=.5*width,halfLength=.5*length,widthStart=-halfWidth+halfWidth%ticks,widthEnd=-widthStart,lengthStart=-halfLength+halfLength%ticks,lengthEnd=-lengthStart,skipEvery=0;for(let i=widthStart,j=0;i<=widthEnd;i+=ticks,j+=1)j%skipEvery!=0&&(positions.push(lengthStart,i,0),positions.push(lengthEnd,i,0),positions.push(lengthStart,i,0));for(let i=lengthStart,j=0;i<=lengthEnd;i+=ticks,j+=1)j%skipEvery!=0&&(positions.push(i,widthStart,0),positions.push(i,widthEnd,0),positions.push(i,widthStart,0))}else{for(let i=.5*-width;i<=.5*width;i+=ticks)positions.push(.5*-length,i,0),positions.push(.5*length,i,0),positions.push(.5*-length,i,0);for(let i=.5*-length;i<=.5*length;i+=ticks)positions.push(i,.5*-width,0),positions.push(i,.5*width,0),positions.push(i,.5*-width,0)}return regl({vert:"precision mediump float;\n\n uniform float camNear, camFar;\n uniform mat4 model, view, projection;\n\n attribute vec3 position;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n void main() {\n fragPosition = position;\n worldPosition = model * vec4(position, 1);\n vec4 glPosition = projection * view * worldPosition;\n gl_Position = glPosition;\n }",frag:"precision mediump float;\n uniform vec4 color;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n uniform vec4 fogColor;\n uniform bool fadeOut;\n void main() {\n float dist = .5;\n if(fadeOut){\n dist = distance( vec2(0.,0.), vec2(worldPosition.x, worldPosition.y));\n dist *= 0.0025;\n dist = sqrt(dist);\n }\n\n gl_FragColor = mix(color, fogColor, dist);\n }\n ",attributes:{position:regl.buffer(positions)},count:positions.length/3,uniforms:{model:(context,props)=>props&&props.model?props.model:glMat4.identity([]),color:(context,props)=>props&&props.color?props.color:color,fogColor:(context,props)=>props&&props.color?[props.color[0],props.color[1],props.color[2],0]:[color[0],color[1],color[2],0],fadeOut:(context,props)=>props&&void 0!==props.fadeOut?props.fadeOut:fadeOut},lineWidth:(context,props)=>Math.min(props&&props.lineWidth?props.lineWidth:lineWidth,regl.limits.lineWidthDims[1]),primitive:"lines",cull:{enable:!0,face:"front"},polygonOffset:{enable:!0,offset:{factor:1,units:10*Math.random()}},blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}})},meshColor=[0,.6,1,1];var renderDefaults=Object.freeze({__proto__:null,background:[1,1,1,1],meshColor:meshColor,lightColor:[1,1,1,1],lightDirection:[.2,.2,1],lightPosition:[100,200,100],ambientLightAmount:.3,diffuseLightAmount:.89,specularLightAmount:.16,materialShininess:8});var index$1=Object.freeze({__proto__:null,drawGrid:(regl,params)=>{const{size:size,ticks:ticks}=Object.assign({},{size:[50,50],ticks:[10,1]},params),drawMainGrid=makeDrawGrid(regl,{size:size,ticks:ticks[0]}),drawSubGrid=makeDrawGrid(regl,{size:size,ticks:ticks[1]});return props=>{drawMainGrid(props),drawSubGrid({color:props.subColor,fadeOut:props.fadeOut})}},drawAxis:(regl,params)=>{let{size:size,xColor:xColor,yColor:yColor,zColor:zColor,lineWidth:lineWidth,alwaysVisible:alwaysVisible}=Object.assign({},{xColor:[1,0,0,1],yColor:[0,1,0,1],zColor:[0,0,1,1],size:10,lineWidth:3,alwaysVisible:!0},params);lineWidth>regl.limits.lineWidthDims[1]&&(lineWidth=regl.limits.lineWidthDims[1]);const points=[0,0,0,size,0,0],commandParams={frag:"precision mediump float;\n uniform vec4 color;\n void main() {\n gl_FragColor = color;\n }",vert:"\n precision mediump float;\n attribute vec3 position;\n uniform mat4 model, view, projection;\n void main() {\n gl_Position = projection * view * model * vec4(position, 1);\n }",uniforms:{model:(context,props)=>props&&props.model?props.model:glMat4.identity([]),color:(context,props)=>props.color,angle:(contet,props)=>props.angle},attributes:{position:points},count:points.length/3,primitive:"line loop",lineWidth:lineWidth,depth:{enable:!alwaysVisible}},xAxisModel=glMat4.identity([]),yAxisModel=glMat4.rotateZ(glMat4.create(),glMat4.identity([]),Math.PI/2),zAxisModel=glMat4.rotateY(glMat4.create(),glMat4.identity([]),-Math.PI/2),single=regl(commandParams);return props=>{const defaults={model:glMat4.identity([])};return props=Object.assign({},defaults,props),single([{color:xColor,model:glMat4.multiply(glMat4.create(),props.model,xAxisModel)},{color:yColor,model:glMat4.multiply(glMat4.create(),props.model,yAxisModel)},{color:zColor,model:glMat4.multiply(glMat4.create(),props.model,zAxisModel)}])}},drawMesh:(regl,params={extras:{}})=>{const defaults={useVertexColors:!0,dynamicCulling:!0,geometry:void 0,color:meshColor,visuals:{}},{geometry:geometry,dynamicCulling:dynamicCulling,useVertexColors:useVertexColors,color:color,visuals:visuals}=Object.assign({},defaults,params),ambientOcclusion=regl.buffer([]),hasIndices=!!(geometry.indices&&geometry.indices.length>0),hasNormals=!!(geometry.normals&&geometry.normals.length>0),transparent="transparent"in visuals&&visuals.transparent,hasVertexColors=!!(useVertexColors&&geometry.colors&&geometry.colors.length>0),transforms=geometry.transforms||glMat4.create(),flip=glMat4.determinant(transforms)<0,cullFace=dynamicCulling&&flip?"front":"back",vert=hasVertexColors?"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection, unormal;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nattribute float ao;\nvarying float ambientAo;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n surfacePosition = (unormal * vec4(position, 1.0)).xyz;\n surfaceNormal = normalize((unormal * vec4(normal, 1.0)).xyz); //vec4 transformedNormal = uNormalMatrix * vec4(aVertexNormal, 1.0);\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n //gl_Position = projection * view * worldSpacePosition;\n\n vColor = color;\n\n //ambientAo = (1. - ao) * (0.5 * max(normal.x, 0.) + 0.5);\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n //gl_Position = zBufferAdjust(glPosition, camNear, camFar);\n}\n":"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\nvoid main() {\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",frag=hasVertexColors?"\nprecision mediump float;\nvarying vec3 surfaceNormal, surfacePosition;\n\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform float specularLightAmount;\n\nuniform vec3 lightDirection;\nuniform vec4 lightColor;\nuniform vec3 opacity;\nuniform float uMaterialShininess;\n\nvarying vec4 vColor;\nuniform vec4 ucolor;\nuniform float vColorToggler;\n\nuniform vec2 printableArea;\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);//vec4(0.15, 0.15, 0.15, 0.3);\nvarying vec4 _worldSpacePosition;\nvarying float ambientAo;\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n vec4 endColor = vColor * vColorToggler + ucolor * (1.0 - vColorToggler);\n\n vec3 ambient = ambientLightAmount * endColor.rgb ; //ambientAo * \n\n float diffuseWeight = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(diffuseWeight , 0.0, 1.0 );\n\n //specular\n \n vec4 specularColor = vec4(lightColor);\n vec3 eyeDirection = normalize(surfacePosition.xyz);\n vec3 reflectionDirection = reflect(-lightDirection, -surfaceNormal);\n float specularLightWeight = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);\n vec3 specular = specularColor.rgb * specularLightWeight * specularLightAmount;\n\n gl_FragColor = vec4((ambient + diffuse + specular), endColor.a);\n}\n":"\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}",modelMatrixInv=glMat4.invert(glMat4.create(),transforms);let commandParams={primitive:"triangles",vert:vert,frag:frag,uniforms:{model:(context,props)=>transforms,ucolor:(context,props)=>props&&props.color?props.color:color,vColorToggler:(context,props)=>props&&props.useVertexColors&&!0===props.useVertexColors?1:0,unormal:(context,props)=>{const modelViewMatrix=glMat4.invert(glMat4.create(),props.camera.view);return glMat4.multiply(modelViewMatrix,modelMatrixInv,modelViewMatrix),glMat4.transpose(modelViewMatrix,modelViewMatrix),modelViewMatrix}},attributes:{position:regl.buffer({usage:"static",type:"float",data:geometry.positions}),ao:ambientOcclusion},cull:{enable:!0,face:cullFace}};return transparent&&(commandParams.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),geometry.cells?commandParams.elements=geometry.cells:hasIndices?commandParams.elements=regl.elements({usage:"static",type:"uint16",data:geometry.indices}):geometry.triangles?commandParams.elements=geometry.triangles:commandParams.count=geometry.positions.length/3,hasNormals&&(commandParams.attributes.normal=regl.buffer({usage:"static",type:"float",data:geometry.normals})),hasVertexColors&&(commandParams.attributes.color=regl.buffer({usage:"static",type:"float",data:geometry.colors})),commandParams=Object.assign({},commandParams,params.extras),regl(commandParams)},drawLines:(regl,params={})=>{const defaults={color:meshColor,geometry:void 0};let{geometry:geometry,color:color,transparent:transparent}=Object.assign({},defaults,params);"color"in geometry&&(color=geometry.color);const hasIndices=!!(geometry.indices&&geometry.indices.length>0),hasNormals=!!(geometry.normals&&geometry.normals.length>0),hasVertexColors=!!(geometry.colors&&geometry.colors.length>0),commandParams={primitive:"lines",vert:hasVertexColors?"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n vColor = color;\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n":"\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\n\nvoid main() {\n\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",frag:hasVertexColors?"\nprecision mediump float;\nvarying vec4 vColor;\n\nvoid main () {\n gl_FragColor = vColor;\n}\n":"\nprecision mediump float;\nuniform vec4 ucolor;\n\nvoid main () {\n gl_FragColor = ucolor;\n}\n",uniforms:{model:(context,props)=>props.model||geometry.transforms||glMat4.create(),ucolor:(context,props)=>props&&props.color?props.color:color},attributes:{position:regl.buffer({usage:"static",type:"float",data:geometry.positions})}};return transparent&&(commandParams.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),hasVertexColors&&(commandParams.attributes.color=regl.buffer({usage:"static",type:"float",data:geometry.colors})),hasIndices&&(commandParams.elements=regl.elements({usage:"static",type:"uint16",data:geometry.indices})),hasNormals&&(commandParams.attributes.normal=regl.buffer({usage:"static",type:"float",data:geometry.normals})),regl(commandParams)}}),projectMat4=function(out,vec,m){var x=vec[0],y=vec[1],z=vec[2],a00=m[0],a01=m[1],a02=m[2],a03=m[3],a10=m[4],a11=m[5],a12=m[6],a13=m[7],a20=m[8],a21=m[9],a22=m[10],a23=m[11],a30=m[12],a31=m[13],a32=m[14],a33=m[15],lw=1/(x*a03+y*a13+z*a23+a33);return out[0]=(x*a00+y*a10+z*a20+a30)*lw,out[1]=(x*a01+y*a11+z*a21+a31)*lw,out[2]=(x*a02+y*a12+z*a22+a32)*lw,out};var transform=projectMat4,cameraUnproject=function(out,vec,viewport,invProjectionView){var viewX=viewport[0],viewY=viewport[1],viewWidth=viewport[2],viewHeight=viewport[3],x=vec[0],y=vec[1],z=vec[2];return x-=viewX,y=viewHeight-y-1,y-=viewY,out[0]=2*x/viewWidth-1,out[1]=2*y/viewHeight-1,out[2]=2*z-1,transform(out,out,invProjectionView)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jscad/regl-renderer",
3
- "version": "3.0.1-alpha.0",
3
+ "version": "3.0.2-alpha.0",
4
4
  "description": "Renderer for JSCAD Geometries",
5
5
  "homepage": "https://openjscad.xyz/",
6
6
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "devDependencies": {
60
60
  "@jscad/img-utils": "2.0.5",
61
- "@jscad/modeling": "3.0.1-alpha.0",
61
+ "@jscad/modeling": "3.0.2-alpha.0",
62
62
  "@rollup/plugin-commonjs": "^23.0.4",
63
63
  "@rollup/plugin-node-resolve": "^15.0.1",
64
64
  "@rollup/plugin-terser": "^0.4.3",
@@ -68,5 +68,5 @@
68
68
  "rollup": "^2.79.1",
69
69
  "rollup-plugin-banner": "^0.2.1"
70
70
  },
71
- "gitHead": "0660b5c1f1a5faf54d4cfae1cb85bb94182a8d32"
71
+ "gitHead": "ac80d1a7cb0a8efb21aff9193d4a8bccb6e31f1c"
72
72
  }