0xa5d9232c…5604sent to0xa7d8d9ef…d270·#15,692,009·view on Etherscan
// primatives by Aranda\Lasch
// Benjamin Aranda, Jesse Bassett, Joaquin Bonifaz, Chris Lasch
function partialSum(e){return e.reduce((e,t,r,o)=>{const a=o.slice(0,r+1),s=a.reduce((e,t)=>e+t,0);return[...e,s]},[])}function setup(){colorMode(HSB),canvas=createCanvas(DIM,DIM,WEBGL),noStroke(),rect(100*M,500*M,50*M,50*M),pixelDensity(2),1==mobile?(txG=createGraphics(txW,txH,WEBGL),txS=txG.createShader(basicVert2,fragShaderA)):(shaderA=createShader(basicVert,fragShaderA),shaderA.setUniform("u_resolution",[DIM,DIM]),shad_Size=1024,bkrez=2800,myImg=createImage(8*shad_Size,shad_Size)),shaderBK=createShader(basicVert,fragShaderA),shaderBK.setUniform("u_resolution",[bkrez,bkrez]),bkImg=createImage(bkrez,bkrez),sPress(),sun=new p5.Vector(1,-1,1),sun.normalize(),gBorder=2,gScale=20,gVals=growth_Max+gBorder,gVals=bkGridTrueMax,grw=new GrowSys(1),rg=new Grid_Rhomb(gVals,gVals,gVals,gScale);let e=patternSelect[0];for(targetPt=rg.gPts[e.x][e.y][e.z],patternSelect.shift(),go.push(new Go3d(1,targetPt.x,targetPt.y,targetPt.z,gScale)),currGo=go[0],goNum=1,i=0;i<goNum;i++){goDepot[i]=[],resetDepot[i]=[],nextGrow();for(let e=0;e<go.length;e++){resetDepot[i][e]=[];for(let t=0;t<go[e].verts.length-2;t++)resetDepot[i][e].push(new p5.Vector(go[e].verts[t].x,go[e].verts[t].y,go[e].verts[t].z))}goDepot[i]=go,goModelsDepot.push(goModels)}currCluster=goNum-1,grow=-1,timer=0,color0=color(hR,sR,bR),color1=color0,color2=color0;let t=R.random_int(1/6*goModels.length,.8*goModels.length),r=Math.round(5/12*goModels.length),o=t+r*(1/3),a=t+.5*r,s=t+r*(2/3),n=t+1*r,c=R.random_int(0,3);for(i=0;i<goModels.length;i++)renderPattern.push(0),1==ERASE&&i>5&&i<.33*goModels.length&&(renderPattern[i]=1),1==WIREFRAME?0==c?i>t&&i<n&&(renderPattern[i]=3):1==c?i>t&&i<a?renderPattern[i]=3:i>a&&i<n&&(renderPattern[i]=5):2==c?i>t&&i<o?renderPattern[i]=3:i>o&&i<s&&(renderPattern[i]=3):i>s&&i<n?renderPattern[i]=5:i>t&&i<n&&(renderPattern[i]=3):1==OPAQUE?i>t&&i<n&&(renderPattern[i]=2):renderPattern.push(0)}function draw(){if(1==drawTex){if(drawTex=!1,1==mobile){txG.noStroke(),txG.shader(txS),txS.setUniform("u_resolution",[txH,txH]);for(let e=0;e<8;e++)console.log("txG mode, Jesse"),readUniforms(txS,e),txG.rect(e*txW/8-txW/2,-txH/2,txW/8,txH);txG.resetShader()}else{shaderA.setUniform("u_resolution",[shad_Size,shad_Size]),shader(shaderA),resizeCanvas(shad_Size,shad_Size,!1);for(let e=0;e<8;e++)readUniforms(shaderA,e),rect(0,0,40,40),myImg.copy(canvas,0,0,2*shad_Size,2*shad_Size,shad_Size*e,0,2*shad_Size,2*shad_Size);resetShader()}resizeCanvas(bkrez,bkrez,!1),shader(shaderBK);let e=2*v;UNIVAR[8][0][0]=e,bkgd_f!=bkgd_cat.arr[2].name&&(UNIVAR[8][0][1]=e+R.random_num(-20,20),UNIVAR[8][0][2]=e+R.random_num(-30,30),UNIVAR[8][0][3]=e+R.random_num(-30,20),UNIVAR[8][1][0]=e+R.random_num(-20,30)),UNIVAR[8][12][0]*=e/60,UNIVAR[8][12][1]*=e/60,UNIVAR[8][12][2]*=e/60,UNIVAR[8][12][3]*=e/60,UNIVAR[8][13][0]*=e/60,readUniforms(shaderBK,8),rect(0,0,40,40),bkImg.copy(canvas,0,0,bkrez,bkrez,0,0,bkrez,bkrez),resetShader(),resizeCanvas(DIM,DIM,!1)}if(background(color1),makeBorder(),lightFalloff(.003,3e-4,0),ambientLight(color0),noStroke(),0==run_animation&&(steps=go.length),1==grow)steps>=go.length?steps=go.length:millis()>timer&&(timer+=delay,steps++);else if(-1==grow)if(steps<=1){currCluster+=1,currCluster>goNum-1&&(currCluster=0),1==initGrow&&(go=[],resetGo=[],go=goDepot[currCluster].slice(),resetGo=resetDepot[currCluster].slice(),goModels=goModelsDepot[currCluster],initGrow=!1),zoomStart=zoom,camStart=[cam[0],cam[1],cam[2]],camTarg=[camTarg[0],camTarg[1],camTarg[2]];for(let e=0;e<go.length;e++)for(let t=0;t<go[e].verts.length-2;t++)go[e].verts[t]=new p5.Vector(resetGo[e][t].x,resetGo[e][t].y,resetGo[e][t].z);ratio=+camSpeed,vStart=vTarg,steps=1,grow*=-1}else millis()>timer&&(timer+=delay,steps-=3);if(push(),stroke(255,0,0),strokeWeight(6),line(0,0,0,0,0,1e5),pop(),updateCam(),1==swap&&(save("primitive"),pixelDensity(2),ortho(-v*zoom,v*zoom,-v*zoom,v*zoom,-1e4,1e4),prtScn=!1,swap=!1),1==prtScn){let e=4800/DIM;pixelDensity(e),ortho(-v*zoom,v*zoom,-v*zoom,v*zoom,-1e4,1e4),swap=!0}}function readUniforms(e,t){for(let r=0;r<UNI.length;r++)e.setUniform(UNI[r],UNIVAR[t][r])}function lPress(){camStart=[cam[0],cam[1],cam[2]],camTarg=[0,camTarg[1]+angle,camTarg[2]+angle],zoomStart=zoom,myAngle+=angle,zflag--,zflag<0&&(zflag=2),zoomTarg=0==zflag?defaultZoom/2:defaultZoom,ratio=+camSpeed,vStart=vTarg,getModelExtents()}function rPress(){camStart=[cam[0],cam[1],cam[2]],camTarg=[0,camTarg[1]-angle,camTarg[2]-angle],zoomStart=zoom,myAngle-=angle,zflag++,zflag>=3&&(zflag=0),zoomTarg=0==zflag?defaultZoom/2:defaultZoom,ratio=+camSpeed,vStart=vTarg,getModelExtents()}function sPress(){camStart=[cam[0],cam[1],cam[2]],camTarg=[cam[0],cam[1],cam[2]],Math.abs((myAngle+zoomRR)%Math.PI)<=ZoomPercent?(zoomTarg=defaultZoom/2,zflag=0):(zoomTarg=defaultZoom,zoomRRR>=.5?zflag=1:zoomRRR<=.5&&(zflag=2)),zoomStart=zoomTarg,ratio=+camSpeed,ratio=.98999}function touchStarted(){mouseX>WIDTH/2?rPress():mouseX<WIDTH/2&&lPress()}function keyPressed(){if(keyCode===LEFT_ARROW?lPress():keyCode===RIGHT_ARROW?rPress():keyCode===UP_ARROW?(zoomStart=zoom,zoomTarg=defaultZoom/2,ratio=+camSpeed,camStart=[cam[0],cam[1],cam[2]],camTarg=[0,camTarg[1],camTarg[2]],vStart=vTarg,getModelExtents()):keyCode===DOWN_ARROW&&(zoomStart=zoom,zoomTarg=defaultZoom,ratio=+camSpeed,camStart=[cam[0],cam[1],cam[2]],camTarg=[0,camTarg[1],camTarg[2]],vStart=vTarg,getModelExtents()),"o"==key||"O"==key){let e=[],t=[],r=0;for(let o=0;o<go.length;o++)if(1!=renderPattern[o])for(let a=0;a<go[o].faces.length;a++){for(let t=0;t<go[o].faces[a].facePts.length;t++)e.push("v "+go[o].faces[a].facePts[t].x+" "+go[o].faces[a].facePts[t].y+" "+go[o].faces[a].facePts[t].z),r+=1;t.push("f "+(r-2)+" "+(r-1)+" "+r)}let o=e.concat(t);saveStrings(o,"primitive","obj")}"i"!=key&&"I"!=key||(prtScn=!0,console.log(prtScn),console.log(swap)),"u"!=key&&"U"!=key||myImg.save("primatives texture","png"),"g"!=key&&"G"!=key||(run_animation=!0,grow=-1)}function makeBorder(){push(),scale(zoom),fill(color2);let e=.1*v/1.15;1==BKTEXT&&(push(),lightFalloff(.003,3e-4,0),ambientLight(color0),texture(bkImg),translate(0,0,-1e3),box(1.15*(2*v-e)/zoom,1.15*(2*v-e)/zoom),pop()),push(),translate(-1.15*v/1.15,0,1e3),box(e,5*v),pop(),push(),translate(1.15*v/1.15,0,1e3),box(e,5*v),pop(),push(),translate(0,1.15*v/1.15,1e3),box(5*v,e),pop(),push(),translate(0,-1.15*v/1.15,1e3),box(5*v,e),pop(),pop()}function nextGrow(){cam=[0,cam[1]-myAngle,cam[2]-myAngle],camStart=[0,camStart[1]-myAngle,camStart[2]-myAngle],camTarg=[0,camTarg[1]-myAngle,camTarg[2]-myAngle],v=0,vStart=0,vTarg=0,steps=0,mGo=0,go=[],goModels=[],go.push(new Go3d(1,targetPt.x,targetPt.y,targetPt.z,gScale)),currGo=go[0];R.random_int(1,Math.floor(growth_Max/2)),Math.floor(growth_Max/2),R.random_int(1,growth_Max-1),R.random_int(1,growth_Max-1);currArraySize=go.length;for(let e=0;e<patternSelect.length;e++){let t=patternSelect[e];grw.growToTarget(rg.gPts[t.x][t.y][t.z])}getModelExtents();for(let e=0;e<go.length;e++){go[e].center.x+=-centerX,go[e].center.y+=-centerY,go[e].center.z+=-centerZ;for(let t=0;t<go[e].faces.length;t++){go[e].faces[t].center.x+=-centerX,go[e].faces[t].center.y+=-centerY,go[e].faces[t].center.z+=-centerZ;for(let r=0;r<go[e].faces[t].facePts.length;r++)go[e].faces[t].facePts[r].x+=-centerX,go[e].faces[t].facePts[r].y+=-centerY,go[e].faces[t].facePts[r].z+=-centerZ}}for(let e=0;e<go.length;e++)for(let t=0;t<go[e].verts.length;t++)go[e].verts[t].x+=-centerX,go[e].verts[t].y+=-centerY,go[e].verts[t].z+=-centerZ;xMax+=-centerX,xMin+=-centerX,yMax+=-centerY,yMin+=-centerY,zMax+=-centerZ,zMin+=-centerZ,getModelExtents(),0==v&&(v=vTarg,vStart=vTarg);for(let e=0;e<go.length;e++)geom=new p5.Geometry(1,1,buildModel),geom.gid="go"+mGo+"_"+R.random_dec(),goModels.push(geom),mGo++}function buildModel(){let e=0;for(let t=0;t<go[mGo].faces.length;t++){let r=[];for(let o=0;o<go[mGo].faces[t].facePts.length;o++)this.vertices.push(go[mGo].faces[t].facePts[o]),r.push(e),e+=1;this.faces.push([r[0],r[1],r[2]]),n=createVector(go[mGo].faces[t].normal.x,go[mGo].faces[t].normal.y,go[mGo].faces[t].normal.z),n.normalize(),this.vertexNormals.push(n,n,n);let o=1/8,a=sun.dot(n),s=(sun.angleBetween(n),map(a,-1,1,0,7));s=round(s);let c=this.vertices[r[0]].dist(this.vertices[r[1]]),i=this.vertices[r[0]].dist(this.vertices[r[2]]),l=this.vertices[r[1]].dist(this.vertices[r[2]]);c=map(c,0,41.71563256142714,0,1),i=map(c,0,41.71563256142714,0,1),l=map(c,0,41.71563256142714,0,1),"e"==go[mGo].faces[t].type?(this.uvs.push([o*s,0]),this.uvs.push([o*s,c]),this.uvs.push([o*s+.866*c*o,c/2])):c>i&&c>l?(this.uvs.push([o*s,0]),this.uvs.push([o*s,c]),this.uvs.push([o*s+.809*c*o,c/2])):i>c&&i>l?(this.uvs.push([o*s,0]),this.uvs.push([o*s+.809*i*o,i/2]),this.uvs.push([o*s,i])):l>c&&l>i&&(this.uvs.push([o*s+.809*l*o,l/2]),this.uvs.push([o*s,0]),this.uvs.push([o*s,l]));let m=R3.random_dec(),d=R4.random_dec();if(m<=.5)for(let e=0;e<this.uvs.length;e++)this.uvs[e][1]=1-this.uvs[e][1];if(d<=.5)for(let e=0;e<this.uvs.length;e++);}}function getModelExtents(){let e,t,r=[],o=[],a=[];for(let e=0;e<go.length;e++)for(let t=0;t<go[e].verts.length-2;t++)r.push(go[e].verts[t].x),o.push(go[e].verts[t].y),a.push(go[e].verts[t].z);r.sort((e,t)=>e-t),o.sort((e,t)=>e-t),a.sort((e,t)=>e-t),xMin=r[0],xMax=r[r.length-1],yMin=o[0],yMax=o[o.length-1],zMin=a[0],zMax=a[a.length-1],centerX=(xMax-xMin)/2+xMin,centerY=(yMax-yMin)/2+yMin,centerZ=(zMax-zMin)/2+zMin,e=Math.max(xMax,Math.abs(xMin)),t=Math.max(yMax,Math.abs(yMin)),vTarg=Math.max(e,t)}function drawGrid(){push();let e=Math.ceil((bkGridTrueMax-bkGridDrawBoundsX)/2),t=bkGridDrawBoundsX+e,r=Math.ceil((bkGridTrueMax-bkGridDrawBoundsX)/2),o=bkGridDrawBoundsY+r,a=Math.ceil((bkGridTrueMax-bkGridDrawBoundsX)/2),s=bkGridDrawBoundsZ+a;if(stroke(0,0,0),strokeWeight(1),0==ignX)for(let n=r;n<=o;n++)for(let r=a;r<=s;r++)line(rg.gPts[e][n][r].x,rg.gPts[e][n][r].y,rg.gPts[e][n][r].z,rg.gPts[t][n][r].x,rg.gPts[t][n][r].y,rg.gPts[t][n][r].z);if(0==ignY)for(let n=e;n<=t;n++)for(let e=a;e<=s;e++)line(rg.gPts[n