Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #version 300 es
- //obj=Structure
- precision lowp float;//lowp mediump highp
- uniform sampler2D img0;
- uniform sampler2D img1;
- uniform sampler2D img2;
- uniform sampler2D img3;
- uniform sampler2D img4;
- uniform sampler2D img5;
- uniform sampler2D img6;
- uniform sampler2D img7;
- uniform ivec2 img0s;
- uniform ivec2 img1s;
- uniform ivec2 img2s;
- uniform ivec2 img3s;
- uniform ivec2 img4s;
- uniform ivec2 img5s;
- uniform ivec2 img6s;
- uniform ivec2 img7s;
- uniform sampler2D skybox;
- uniform ivec2 skyboxsize;
- uniform int mode;
- uniform vec2 screensize;
- uniform vec3 cloc;
- uniform vec3 crot;
- uniform vec2 fov;
- uniform vec2 focallength;
- uniform float fdrgb;
- uniform int bounces;
- uniform int samplers;
- uniform int frame;
- uniform vec4 atlastrans[50];
- uniform int atlasflip[50];
- in vec2 v_texCoord;
- out vec4 finalcolor;
- const float Pi=3.141592653589793238462643383279502884197169399375105;
- const int faces=0;
- const int verts=1;
- const int objs=2;
- const int lights=3;
- const int tiles=4;
- //2154321 4321543
- int numberIndexing(int n,int start,int amout){
- int e=10;
- for (int c=0;c<start;c++){
- e=e*10;
- }
- int g=e/10;
- for (int c=0;c<amout-1;c++){
- e=e*10;
- }
- int d=(n/e)*e;
- d=n-d;
- return d/g;
- }
- vec4 colorIncode(ivec2 numbers[28]){ //max6 per color
- vec4 colors=vec4(0,0,0,0);
- int index=0;
- int offset=1000000;
- int color=0;
- for (int i=0;i<26&&numbers[i][1]>0;i++){
- for (int a=0;a<numbers[i][1];a++){
- if (index/7==1){
- color++;
- offset=1000000;
- index=0;
- }
- colors[color]+=float(numberIndexing(numbers[i][0],a,1))/float(offset);
- offset=offset/10;
- index++;
- }
- }
- return vec4(colors[0],colors[1],colors[2],colors[3])*1000000.0;
- }
- void colorDecode(ivec4 colors,inout ivec2 numbers[28]){ //max6 per color
- int index=0;
- int offset=1;
- int offseta=0;
- int color=0;
- for (int i=0;i<28&&numbers[i][1]>-1;i++){
- offset=1;
- for (int a=0;a<numbers[i][1];a++){
- if (index/7==1){
- color++;
- offseta-=index;
- index=0;
- }
- numbers[i][0]+=numberIndexing(colors[color],a+offseta,1)*offset;
- offset=offset*10;
- index++;
- }
- offseta+=numbers[i][1];
- }
- }
- vec3 colorHue(float value){
- value=mod(abs(value),1.0);
- vec3 rgb=vec3(0.0,0.0,0.0);
- if (value<(1.0/3.0)||value==(1.0/3.0)){
- rgb[0]=((1.0/3.0)-value)/(1.0/3.0);
- rgb[1]=1.0-rgb[0];
- }
- if (value>(1.0/3.0)&&(value<((1.0/3.0)*2.0)||value==((1.0/3.0)*2.0))){
- rgb[1]=((1.0/3.0)-(value-(1.0/3.0)))/(1.0/3.0);
- rgb[2]=1.0-rgb[1];
- }
- if (value>((1.0/3.0)*2.0)){
- rgb[2]=((1.0/3.0)-(value-((1.0/3.0)*2.0)))/(1.0/3.0);
- rgb[0]=1.0-rgb[2];
- }
- return rgb;
- }
- vec2 pieRot(vec2 xy,float angle){//rotate a point around 0,0
- angle = angle/180.0*Pi;
- float s = sin(angle);
- float c = cos(angle);
- return vec2(xy[0]*c-xy[1]*s,xy[0]*s+xy[1]*c);
- }
- vec2 pieRotr(vec2 xy,float angle){//rotate a point around 0,0
- float s = sin(angle);
- float c = cos(angle);
- return vec2(xy[0]*c-xy[1]*s,xy[0]*s+xy[1]*c);
- }
- float getRot(vec2 at,vec2 to){
- return -atan(at[1]-to[1],at[0]-to[0])*180.0/Pi;
- }
- float getRotr(vec2 at,vec2 to){
- return -atan(at[1]-to[1],at[0]-to[0]);
- }
- vec3 rotPointb(vec3 point,vec3 rot){
- vec3 offset=vec3(point);
- vec2 fd=pieRotr(vec2(offset[0],offset[1]),rot[2]);//z
- offset[0]=fd[0];
- offset[1]=fd[1];
- fd=pieRotr(vec2(offset[0],offset[2]),rot[1]);//y
- offset[0]=fd[0];
- offset[2]=fd[1];
- fd=pieRotr(vec2(offset[1],offset[2]),rot[0]);//x
- offset[1]=fd[0];
- offset[2]=fd[1];
- return offset;
- }
- vec3 rotPointba(vec3 point,vec3 rot){
- vec3 offset=vec3(point);
- vec2 fd=pieRotr(vec2(offset[1],offset[2]),rot[0]);//x
- offset[1]=fd[0];
- offset[2]=fd[1];
- fd=pieRotr(vec2(offset[0],offset[2]),rot[1]);//y
- offset[0]=fd[0];
- offset[2]=fd[1];
- fd=pieRotr(vec2(offset[0],offset[1]),rot[2]);//z
- offset[0]=fd[0];
- offset[1]=fd[1];
- return offset;
- }
- void completeTry(int mode,inout vec3 angs,inout vec3 sides){//(a,b,c,A,B,C)cap ang//!ass !saa//sss=abc, ssa=cbB,baB, sas=bAc, aas=ACc,CBb, asa=AcB,AcB
- if (mode==0){//sss
- angs[0]=acos(((sides[1]*sides[1])+(sides[2]*sides[2])-(sides[0]*sides[0]))/(2.0*sides[1]*sides[2]));
- angs[1]=acos(((sides[2]*sides[2])+(sides[0]*sides[0])-(sides[1]*sides[1]))/(2.0*sides[2]*sides[0]));
- angs[2]=Pi-angs[0]-angs[1];
- }else if (mode==1){//sas bAc
- sides[0]=sqrt((sides[2]*sides[2])+(sides[1]*sides[1])-2.0*sides[2]*sides[1]*cos(angs[0]));
- angs[2]=asin((sides[2]*sin(angs[0]))/sides[0]);
- angs[1]=Pi-angs[0]-angs[2];
- }
- }
- float valueRamp(float v,float a, float b){
- return (a*(1.0-v))+(b*v);
- }
- vec3 colorRamp(float v,vec4 ramp[6]){
- for (int i=0;i<6;i++){
- if (!(v<ramp[i][0])){
- if (!(v>ramp[i+1][0])){
- v=(v-ramp[i][0])/(ramp[i+1][0]-ramp[i][0]);
- vec3 a=vec3(ramp[i][1],ramp[i][2],ramp[i][3]);
- vec3 b=vec3(ramp[i+1][1],ramp[i+1][2],ramp[i+1][3]);
- return vec3((a*(1.0-v))+(b*v));
- }else{
- //break;
- }
- }
- }
- return vec3(0);
- }
- vec3 colorMix(float v,vec3 a,vec3 b){
- return (a*(1.0-v))+(b*v);
- }
- vec4 edgeBoundingbox(vec4 edge){
- vec4 box=vec4(0,0,0,0);
- if (edge[0]>edge[2]){;
- box[0]=edge[2];
- box[2]=edge[0]-edge[2];
- }else{
- box[0]=edge[0];
- box[2]=edge[2]-edge[0];
- }if (edge[1]>edge[3]){
- box[1]=edge[3];
- box[3]=edge[1]-edge[3];
- }else{
- box[1]=edge[1];
- box[3]=edge[3]-edge[1];
- }
- return box;
- }
- vec4 intersectionLine(vec4 edge1,vec4 edge2){
- float rot1=getRot(vec2(edge1[0],edge1[1]),vec2(edge1[2],edge1[3]));//+((edge1.normal)?180:0)
- float rot2=getRot(vec2(edge2[0],edge2[1]),vec2(edge2[2],edge2[3]));//+((edge2.normal)?180:0)
- vec2 a1a=vec2(pieRot(vec2(edge1[0],edge1[1]),rot1));
- vec2 a1b=vec2(pieRot(vec2(edge1[2],edge1[3]),rot1));
- vec2 b1a=vec2(pieRot(vec2(edge2[0],edge2[1]),rot1));
- vec2 b1b=vec2(pieRot(vec2(edge2[2],edge2[3]),rot1));
- vec2 a2a=vec2(pieRot(vec2(edge2[0],edge2[1]),rot2));
- vec2 a2b=vec2(pieRot(vec2(edge2[2],edge2[3]),rot2));
- vec2 b2a=vec2(pieRot(vec2(edge1[0],edge1[1]),rot2));
- vec2 b2b=vec2(pieRot(vec2(edge1[2],edge1[3]),rot2));
- if ((a1b[1]>=b1a[1]&&a1b[1]<=b1b[1])||(a1b[1]<=b1a[1]&&a1b[1]>=b1b[1])){
- if ((a2b[1]>=b2a[1]&&a2b[1]<=b2b[1])||(a2b[1]<=b2a[1]&&a2b[1]>=b2b[1])){
- vec2 intersecta=vec2(a1b[1]-b1b[1],b1a[1]-a1a[1]);
- vec4 box=edgeBoundingbox(vec4(a2a,a2b));
- vec2 intersect=vec2(box[0]+(intersecta[0]/(intersecta[0]+intersecta[1])*box[2]),box[1]+(intersecta[1]/(intersecta[0]+intersecta[1])*box[3]));
- vec2 intersectb=pieRot(intersect,-rot2);
- return vec4(1.0,intersectb[0],intersectb[1],intersecta[0]/(intersecta[0]+intersecta[1]));//true,loc,loc,per
- }
- }
- return vec4(0.0,0.0,0.0,0.0);
- }
- vec3 pointRel3(vec2 loc,vec2 v0,vec2 v1,vec2 v2,vec4 a){// gets were a point is relitive to a triangle
- loc-=v0;
- v1-=v0;
- v2-=v0;
- v0=vec2(0,0);
- float r=getRot(v0,v1);
- loc=pieRot(loc,r);
- v1=pieRot(v1,r);
- v2=pieRot(v2,r);
- vec4 la=vec4(v1[0]*a[1],0,v1[0]*a[1],v2[1]);
- vec4 inter;
- vec2 v4=vec2(0.0,0.0);
- int line=1;
- if (v2[0]>la[0]){
- inter=intersectionLine(vec4(v1,v2),la);
- line=0;
- v4=vec2(((v1-v2)*inter[3])+v2);
- }else{
- inter=intersectionLine(vec4(v0,v2),la);
- v4=vec2(((v0-v2)*inter[3])+v2);
- }
- float dis=loc[1]/v4[1];
- return vec3(line,inter[3],dis);
- }
- vec3 insideEdgeR(vec2 point,vec2 v0,vec2 v1){
- float rot=getRot(v0,v1);
- vec2 a=pieRot(vec2(v1-v0),rot);
- vec2 b=pieRot(vec2(point-v0),rot);
- float offset=-0.0;
- vec3 c;
- c[1]=b[0]/a[0];
- c[2]=b[1]-a[1];
- if (b[1]>a[1]){
- c[0]=1.0;
- }
- return c;
- }
- vec4 insideFaceR(vec2 point,vec2 v0,vec2 v1,vec2 v2){// is a point in side of a triangle
- vec4 locs=vec4(v0,v0);
- if (v1[0]<locs[0]){
- locs[0]=v1[0];
- }
- if (v1[0]>locs[2]){
- locs[2]=v1[0];
- }
- if (v1[1]<locs[1]){
- locs[1]=v1[1];
- }
- if (v1[1]>locs[3]){
- locs[3]=v1[1];
- }
- if (v2[0]<locs[0]){
- locs[0]=v2[0];
- }
- if (v2[0]>locs[2]){
- locs[2]=v2[0];
- }
- if (v2[1]<locs[1]){
- locs[1]=v2[1];
- }
- if (v2[1]>locs[3]){
- locs[3]=v2[1];
- }
- if (point[0]>=locs[0]&&point[0]<=locs[2]&&point[1]>=locs[1]&&point[1]<=locs[3]){
- int inside=0;
- vec3 b=vec3(0.0,0.0,0.0);
- vec3 a0=insideEdgeR(point,v0,v1);
- inside+=int(a0[0]);
- b[0]=a0[1];
- vec3 a1=insideEdgeR(point,v1,v2);
- inside+=int(a1[0]);
- b[1]=a1[1];
- vec3 a2=insideEdgeR(point,v2,v0);
- inside+=int(a2[0]);
- b[2]=a2[1];
- float offset=0.0005;
- if (inside==3){//frount/back
- return vec4(1.0,b);
- }else if (inside==0){//frount/back
- return vec4(2.0,b);
- }else{
- if (a0[0]==a1[0]){
- if (abs(a2[2])<offset){
- return vec4(1.0,b);
- }
- }else if (a1[0]==a2[0]){
- if (abs(a0[2])<offset){
- return vec4(1.0,b);
- }
- }else if (a0[0]==a2[0]){
- if (abs(a1[2])<offset){
- return vec4(1.0,b);
- }
- }
- }
- }
- return vec4(0.0,0.0,0.0,0.0);
- }
- float rel3pointf(float p1,float p2,float p3,float a,vec3 rel){
- float a1=((p2-p1)*a)+p1;
- float a2=0.0;
- if (int(rel[0])==0){
- a2=((p2-p3)*rel[1])+p3;
- }else{
- a2=((p1-p3)*rel[1])+p3;
- }
- return ((a2-a1)*rel[2])+a1;
- }
- vec2 rel3point2(vec2 p1,vec2 p2,vec2 p3,float a,vec3 rel){
- vec2 a1=vec2(((p2-p1)*a)+p1);
- vec2 a2=vec2(0);
- if (int(rel[0])==0){
- a2=vec2(((p2-p3)*rel[1])+p3);
- }else{
- a2=vec2(((p1-p3)*rel[1])+p3);
- }
- return ((a2-a1)*rel[2])+a1;
- }
- vec3 rel3point3(vec3 p1,vec3 p2,vec3 p3,float a,vec3 rel){
- vec3 a1=vec3(((p2-p1)*a)+p1);
- vec3 a2=vec3(0);
- if (int(rel[0])==0){
- a2=vec3(((p2-p3)*rel[1])+p3);
- }else{
- a2=vec3(((p1-p3)*rel[1])+p3);
- }
- return ((a2-a1)*rel[2])+a1;
- }
- void myskybox(vec3 crot,int bounce,vec3 vec,vec2 vecoff,inout vec4 color,vec2 c,int mode){
- vec3 skyvl[12];
- vec2 skyvt[18];
- vec3 skyvn[12];
- ivec3 skyv[40];
- ivec3 skyf[14];
- skyvl[0]=rotPointb(vec3(-10.000000,10.000000,-10.000000),vec3(-Pi/2.0,0,0));
- skyvl[1]=rotPointb(vec3(-10.000000,10.000000,10.000000),vec3(-Pi/2.0,0,0));
- skyvl[2]=rotPointb(vec3(10.000000,10.000000,-10.000000),vec3(-Pi/2.0,0,0));
- skyvl[3]=rotPointb(vec3(10.000000,10.000000,10.000000),vec3(-Pi/2.0,0,0));
- skyvl[4]=rotPointb(vec3(-10.000000,-10.000000,-10.000000),vec3(-Pi/2.0,0,0));
- skyvl[5]=rotPointb(vec3(-10.000000,-10.000000,10.000000),vec3(-Pi/2.0,0,0));
- skyvl[6]=rotPointb(vec3(10.000000,-10.000000,-10.000000),vec3(-Pi/2.0,0,0));
- skyvl[7]=rotPointb(vec3(10.000000,-10.000000,10.000000),vec3(-Pi/2.0,0,0));
- skyvl[8]=rotPointb(vec3(9,9,9),vec3(0,Pi/2.0,0));//
- skyvl[9]=rotPointb(vec3(-9,9,9),vec3(0,Pi/2.0,0));
- skyvl[10]=rotPointb(vec3(-9,-9,9),vec3(0,Pi/2.0,0));
- skyvl[11]=rotPointb(vec3(9,-9,9),vec3(0,Pi/2.0,0));
- skyvt[0]=vec2(0.250000,0.666667);
- skyvt[1]=vec2(0.000001,0.333333);
- skyvt[2]=vec2(0.000001,0.666667);
- skyvt[3]=vec2(0.500000,0.666667);
- skyvt[4]=vec2(0.250000,0.333333);
- skyvt[5]=vec2(0.750000,0.666667);
- skyvt[6]=vec2(0.500000,0.333333);
- skyvt[7]=vec2(1.000000,0.666667);
- skyvt[8]=vec2(0.750000,0.333333);
- skyvt[9]=vec2(0.750000,1.000000);
- skyvt[10]=vec2(0.500000,1.000000);
- skyvt[11]=vec2(0.500000,0.000000);
- skyvt[12]=vec2(1.000000,0.333333);
- skyvt[13]=vec2(0.750000,0.000000);
- skyvt[14]=vec2(0,0);//
- skyvt[15]=vec2(1,0);
- skyvt[16]=vec2(1,1);
- skyvt[17]=vec2(0,1);
- skyvn[0]=vec3(-0.5773,-0.5773,0.5773);
- skyvn[1]=vec3(0.5773,-0.5773,-0.5773);
- skyvn[2]=vec3(0.5773,-0.5773,0.5773);
- skyvn[3]=vec3(-0.5773,0.5773,0.5773);
- skyvn[4]=vec3(-0.5773,-0.5773,-0.5773);
- skyvn[5]=vec3(0.5773,0.5773,0.5773);
- skyvn[6]=vec3(-0.5773,0.5773,-0.5773);
- skyvn[7]=vec3(0.5773,0.5773,-0.5773);
- skyvn[8]=vec3(0,0,0);//
- skyvn[9]=vec3(0,0,0);
- skyvn[10]=vec3(0,0,0);
- skyvn[11]=vec3(0,0,0);
- skyv[0]=ivec3(3,1,1);
- skyv[1]=ivec3(2,2,2);
- skyv[2]=ivec3(1,3,3);
- skyv[3]=ivec3(7,4,4);
- skyv[4]=ivec3(4,5,5);
- skyv[5]=ivec3(3,1,1);
- skyv[6]=ivec3(5,6,6);
- skyv[7]=ivec3(8,7,7);
- skyv[8]=ivec3(7,4,4);
- skyv[9]=ivec3(1,8,3);
- skyv[10]=ivec3(6,9,8);
- skyv[11]=ivec3(5,6,6);
- skyv[12]=ivec3(1,10,3);
- skyv[13]=ivec3(7,4,4);
- skyv[14]=ivec3(3,11,1);
- skyv[15]=ivec3(6,9,8);
- skyv[16]=ivec3(4,12,5);
- skyv[17]=ivec3(8,7,7);
- skyv[18]=ivec3(3,1,1);
- skyv[19]=ivec3(4,5,5);
- skyv[20]=ivec3(2,2,2);
- skyv[21]=ivec3(7,4,4);
- skyv[22]=ivec3(8,7,7);
- skyv[23]=ivec3(4,5,5);
- skyv[24]=ivec3(5,6,6);
- skyv[25]=ivec3(6,9,8);
- skyv[26]=ivec3(8,7,7);
- skyv[27]=ivec3(1,8,3);
- skyv[28]=ivec3(2,13,2);
- skyv[29]=ivec3(6,9,8);
- skyv[30]=ivec3(1,10,3);
- skyv[31]=ivec3(5,6,6);
- skyv[32]=ivec3(7,4,4);
- skyv[33]=ivec3(6,9,8);
- skyv[34]=ivec3(2,14,2);
- skyv[35]=ivec3(4,12,5);
- skyv[36]=ivec3(9,15,9);//
- skyv[37]=ivec3(10,16,10);//
- skyv[38]=ivec3(11,17,11);//
- skyv[39]=ivec3(12,18,12);//
- skyf[0]=ivec3(36,37,38);
- skyf[1]=ivec3(36,38,39);
- skyf[2]=ivec3(6,7,8);
- skyf[3]=ivec3(9,10,11);
- skyf[4]=ivec3(12,13,14);
- skyf[5]=ivec3(15,16,17);
- skyf[6]=ivec3(18,19,20);
- skyf[7]=ivec3(21,22,23);
- skyf[8]=ivec3(24,25,26);
- skyf[9]=ivec3(27,28,29);
- skyf[10]=ivec3(30,31,32);
- skyf[11]=ivec3(33,34,35);
- skyf[12]=ivec3(0,1,2);//
- skyf[13]=ivec3(3,4,5);
- for (int f=0;f<14;f++){
- vec3 v0w=skyvl[skyv[skyf[f][0]][0]-1];
- vec3 v1w=skyvl[skyv[skyf[f][1]][0]-1];
- vec3 v2w=skyvl[skyv[skyf[f][2]][0]-1];
- vec3 v0c=rotPointb(v0w,-crot); //cam space
- vec3 v1c=rotPointb(v1w,-crot);
- vec3 v2c=rotPointb(v2w,-crot);
- if (fov[0]<180.0&&fov[1]<180.0){
- //if (bounce==0){
- v0c=rotPointb(v0c,-vec); //cam space
- v1c=rotPointb(v1c,-vec);
- v2c=rotPointb(v2c,-vec);
- // }
- v0c-=vec3(0,vecoff*v0c[0]); //prospective
- v1c-=vec3(0,vecoff*v1c[0]);
- v2c-=vec3(0,vecoff*v2c[0]);
- }else{
- v0c=rotPointb(v0c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0))); //cam space
- v1c=rotPointb(v1c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0)));
- v2c=rotPointb(v2c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0)));
- }
- vec4 a=insideFaceR(vec2(0,0),vec2(v0c[1],v0c[2]),vec2(v1c[1],v1c[2]),vec2(v2c[1],v2c[2]));
- if (a[0]==0.0){// not in side
- continue;
- }
- vec3 rel=pointRel3(vec2(0,0),vec2(v0c[1],v0c[2]),vec2(v1c[1],v1c[2]),vec2(v2c[1],v2c[2]),a);
- float z=rel3pointf(v0c[0],v1c[0],v2c[0],a[1],rel);
- if (z<0.0){
- continue;
- }
- vec2 v0t=skyvt[skyv[skyf[f][0]][1]-1];
- vec2 v1t=skyvt[skyv[skyf[f][1]][1]-1];
- vec2 v2t=skyvt[skyv[skyf[f][2]][1]-1];
- vec2 uv=rel3point2(v0t,v1t,v2t,a[1],rel);
- if (mode==0){
- color=texelFetch(skybox,ivec2(uv[0]*float(skyboxsize[0]),(1.0-uv[1])*float(skyboxsize[1])),0);
- }else{
- //vec3 world=rel3point3(v0w,v1w,v2w,a[1],rel);
- //color=vec4(world,0);
- vec3 v0n=skyvn[skyv[skyf[f][0]][2]-1];
- vec3 v1n=skyvn[skyv[skyf[f][1]][2]-1];
- vec3 v2n=skyvn[skyv[skyf[f][2]][2]-1];
- vec3 normalw=rel3point3(v0n,v1n,v2n,a[1],rel);
- color=vec4(normalw,0);
- }
- //color=vec4(uv,0,0);
- //break;
- //1,4,9,16,25
- if (f==0||f==1){
- float size=0.2;
- float dis=distance(vec2(.5),uv);
- if (dis<size){
- float rot=getRotr(vec2(0.5,0.5),vec2(uv));
- float d=1.0-(dis/size);
- float v=valueRamp(d,0.0,sqrt(Pi*2.0));
- v=v*v;
- vec2 offset=pieRotr(-vec2(v,0),rot);
- crot[1]+=offset[0];
- crot[2]+=offset[1];
- f=1;
- if (v>Pi){///1.5
- color=vec4(0,0,0,1);
- break;
- }else{
- continue;
- }
- continue;
- }else{
- //vecoff[0]+=dis;
- continue;
- }
- }
- break;
- }
- }
- ivec2 imgArray(int width,int index){
- int y=int(floor(float(index/width)));
- int x=index-(width*y);
- return ivec2(x,y);
- }
- int dataindex(int group,int offset){
- int index=(img0s[0]*img0s[1])-1;//v
- index-=1;//indexindexindex
- ivec2 xy=imgArray(img0s[0],index);//imgArray(dataimgwidth,((dataimgwidth*dataimgwidth)-2));
- int l=int(texelFetch(img0,xy,0).r);
- int range=0;
- index-=1;
- for (int i=0;i<l;i++){
- if (i==group){
- break;
- }
- xy=imgArray(img0s[0],index-i);
- range+=int(texelFetch(img0,xy,0).r);
- }
- //index+=1;
- index-=l+range+offset;
- xy=imgArray(img0s[0],index);
- return int(texelFetch(img0,xy,0).r);//index
- }
- float imgData(sampler2D img,ivec2 size,int loc){
- return texelFetch(img0,imgArray(size[0],loc),0).r;
- }
- void debuginfo(inout vec4 color,int letters[6],int numbers,vec2 pixel,vec2 scale,vec2 loc){
- int width=6;
- int height=7;
- ivec2 size=ivec2(img6s)/ivec2(width,height);
- int n[10];
- n[0]=0;
- n[1]=1;
- n[2]=2;
- n[3]=3;
- n[4]=4;
- n[5]=5;
- n[6]=6;
- n[7]=7;
- n[8]=8;
- n[9]=9;
- int l[29];
- l[0]=10;
- l[1]=11;
- l[2]=12;
- l[3]=13;
- l[4]=16;
- l[5]=17;
- l[6]=18;
- l[7]=19;
- l[8]=20;
- l[9]=21;
- l[10]=22;
- l[11]=23;
- l[12]=24;
- l[13]=25;
- l[14]=26;
- l[15]=27;
- l[16]=28;
- l[17]=29;
- l[18]=30;
- l[19]=31;
- l[20]=32;
- l[21]=33;
- l[22]=34;
- l[23]=35;
- l[24]=36;
- l[25]=37;
- l[26]=38;
- l[27]=14;
- l[28]=15;
- pixel=pixel/scale;
- pixel=pixel-loc;
- int a=0;
- for (a;a<6;a++){
- if (letters[a]<0){
- break;
- }
- }
- pixel[0]-=float(size[0]*a);
- for (int i=a-1;i>-1;i--){
- ivec2 location=imgArray(width,l[letters[i]])*size;
- pixel[0]+=float(size[0]);
- if (pixel[0]>0.0&&pixel[0]<float(size[0])&&pixel[1]>0.0&&pixel[1]<float(size[1])){
- vec4 v=texelFetch(img6,location+ivec2(pixel),0);
- if (v[3]>0.7){
- color=vec4(0,1,0,1);
- //color=vec4(1.0-vec3(color),1);
- break;
- }else{
- color=color-0.2;
- }
- }
- }
- pixel[0]-=float(size[0]*(a+1));
- pixel[0]-=float(size[0]*6);
- for (int i=0;i<6;i++){
- int c=numberIndexing(numbers,i,1);
- ivec2 location=imgArray(width,n[c])*size;
- pixel[0]+=float(size[0]);
- if (pixel[0]>0.0&&pixel[0]<float(size[0])&&pixel[1]>0.0&&pixel[1]<float(size[1])){
- vec4 v=texelFetch(img6,location+ivec2(pixel),0);
- if (v[3]>0.7){
- color=vec4(0,1,0,1);
- //color=vec4(1.0-vec3(color),1);
- break;
- }else{
- color=color-0.2;
- }
- }
- }
- }
- void main(){
- /* finalcolor=texelFetch(img6,ivec2(v_texCoord*screensize),0);
- if (finalcolor[3]>0.5){
- finalcolor=vec4(1,0,0,1);
- }
- return; */
- if (bounces<1){
- finalcolor=texelFetch(img0,ivec2(vec2(v_texCoord[0],1.0-v_texCoord[1])*float(img0s)),0);
- if (finalcolor[0]!=0.0){
- finalcolor=vec4(colorHue(finalcolor[0]/12.0),1);
- }
- return;
- }
- ivec2 numbers[28];
- ivec2 ploci;
- vec4 datacolor;
- vec2 ploc=-(v_texCoord-0.5);
- vec2 c;
- if (fov[0]<180.0&&fov[1]<180.0){
- c=vec2(getRotr(vec2(0),vec2(focallength[0],ploc[0])),getRotr(vec2(0),vec2(focallength[1],ploc[1])));
- }else{
- c=fov*(v_texCoord-0.5);
- }
- vec2 s=pieRotr(vec2(0,1),c[0]);//normalize
- s[0]+=s[0]*((1.0-s[1])/s[1]);
- vec2 sa=pieRotr(vec2(0,1),c[1]);
- s[1]=sa[0]+sa[0]*((1.0-sa[1])/sa[1]);
- ploci=ivec2(vec2(0.5,1.0-0.5)*(screensize/4096.0)*4096.0);
- datacolor=texelFetch(img5,ploci,0);
- numbers[0]=ivec2(0,4);//dis
- numbers[1]=ivec2(0,1);//rel
- numbers[2]=ivec2(0,6);
- numbers[3]=ivec2(0,6);
- numbers[4]=ivec2(0,4);//face
- numbers[5]=ivec2(0,6);//a
- numbers[6]=ivec2(-1);//a
- colorDecode(ivec4(datacolor),numbers);
- float disa=float(numbers[0]);
- vec3 rela=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
- int facea=int(numbers[4]);
- float aa=(float(numbers[5])/9999.0)-2.0;
- //rot=vec2(float(numbers[7])/999.0,float(numbers[8])/999.0)-Pi;
- int fida=dataindex(faces,facea);
- int objida=int(texelFetch(img0,imgArray(img0s[0],fida+8),0).r);
- vec3 locala;
- int obja=dataindex(objs,objida);
- int interactable=int(texelFetch(img0,imgArray(img0s[0],obja+0),0).r);
- if (interactable==1){
- int v0=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+0),0).r));
- int v1=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+1),0).r));
- int v2=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+2),0).r));
- vec3 v0c=vec3(imgData(img0,img0s,v0+0),imgData(img0,img0s,v0+1),imgData(img0,img0s,v0+2));
- vec3 v1c=vec3(imgData(img0,img0s,v1+0),imgData(img0,img0s,v1+1),imgData(img0,img0s,v1+2));
- vec3 v2c=vec3(imgData(img0,img0s,v2+0),imgData(img0,img0s,v2+1),imgData(img0,img0s,v2+2));
- locala=rel3point3(v0c,v1c,v2c,aa,rela);
- if (locala[0]>10.0){
- objida=-1;
- }
- }else{
- objida=-1;
- }
- ploci=ivec2(vec2(v_texCoord[0],1.0-v_texCoord[1])*(screensize/4096.0)*4096.0);
- datacolor=texelFetch(img5,ploci,0);
- numbers[0]=ivec2(0,4);//dis !!!!!!!!!!!!!
- numbers[1]=ivec2(0,1);//rel
- numbers[2]=ivec2(0,6);
- numbers[3]=ivec2(0,6);
- numbers[4]=ivec2(0,4);//face
- numbers[5]=ivec2(0,6);//a
- numbers[6]=ivec2(-1);//a
- colorDecode(ivec4(datacolor),numbers);
- /* ivec2 numbers[28];
- numbers[0]=ivec2(0,3);//rgba
- numbers[1]=ivec2(0,3);
- numbers[2]=ivec2(0,3);
- numbers[3]=ivec2(0,3);
- numbers[4]=ivec2(-1);
- colorDecode(ivec4(datacolor),numbers);
- finalcolor=vec4(float(numbers[0])/999.0,float(numbers[1])/999.0,float(numbers[2])/999.0,float(numbers[3])/999.0);
- return; */
- float dis=float(numbers[0]);
- vec3 rel=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
- int face=int(numbers[4]);
- float a=(float(numbers[5])/9999.0)-2.0;
- //vec2 rot=vec2((float(numbers[6])*Pi)/999.0,(float(numbers[7])*Pi)/999.0);
- if (int(rel[0])==2){//skybox
- /* float dis=distance(vec2(Pi,Pi),vec2(mod(abs((-c[0])+crot[2]+Pi),Pi*2.0)-Pi,mod(abs((-c[1])+crot[1]+Pi),Pi*2.0)-Pi));
- //finalcolor=vec4(vec2(abs(mod(abs((-c[0])+crot[2]+Pi),Pi*2.0)-Pi)/Pi,abs(mod(abs((-c[1])+crot[1]+Pi),Pi*2.0)-Pi)/Pi),0,1);
- if (dis>Pi/2.0){
- myskybox(crot,0,vec3(0),s,finalcolor,c,0);
- } */
- myskybox(crot,0,vec3(0),s,finalcolor,c,0);
- /* int letters[6];
- letters[0]=11;
- letters[1]=14;
- letters[2]=6;
- letters[3]=-1;
- //debuginfo(finalcolor,letters,int(numbers[5]),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
- debuginfo(finalcolor,letters,int(abs(mod(abs(crot[2]+Pi),Pi*2.0)-Pi)*100.0),(v_texCoord)*screensize,vec2(.2),vec2(0,0));
- */
- return;
- }
- /* if (int(rel[0])==0){
- finalcolor=vec4(1,1,0,1);
- }
- if (int(rel[0])==1){
- finalcolor=vec4(0,1,1,1);
- }
- return; */
- int fid=dataindex(faces,face);
- int objid=int(texelFetch(img0,imgArray(img0s[0],fid+8),0).r);
- int v0=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+0),0).r));
- int v1=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+1),0).r));
- int v2=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+2),0).r));
- float p1f;
- float p2f;
- vec2 p12;
- vec2 p22;
- vec3 p13;
- vec3 p23;
- vec2 v0t=vec2(imgData(img0,img0s,v0+3),imgData(img0,img0s,v0+4));
- vec2 v1t=vec2(imgData(img0,img0s,v1+3),imgData(img0,img0s,v1+4));
- vec2 v2t=vec2(imgData(img0,img0s,v2+3),imgData(img0,img0s,v2+4));
- vec2 uv=rel3point2(v0t,v1t,v2t,a,rel);
- vec2 uvo=rel3point2(v0t,v1t,v2t,a,vec3(rel[0],rel[1]+0.1,rel[2]))-uv;
- //uv*=4.0;
- vec4 trans=atlastrans[int(imgData(img0,img0s,fid+3))];
- vec2 tuv=vec2(trans[0],trans[1])+vec2((mod((uv[0]-0.000000001),1.0)+0.000000001)*float(img1s[0]),(mod(((1.0-uv[1])-0.000000001),1.0)+0.000000001)*float(img1s[1]))*vec2(trans[2],trans[3]);
- vec4 tcolor=texelFetch(img1,ivec2(tuv),0);
- //tcolor=vec4(.5);
- trans=atlastrans[int(imgData(img0,img0s,fid+9))];
- tuv=vec2(trans[0],trans[1])+vec2((mod((uv[0]-0.000000001),1.0)+0.000000001)*float(img1s[0]),(mod(((1.0-uv[1])-0.000000001),1.0)+0.000000001)*float(img1s[1]))*vec2(trans[2],trans[3]);
- vec4 tnormal=texelFetch(img1,ivec2(tuv),0);
- //tnormal=vec4(.5,.5,1,1);
- trans=atlastrans[int(imgData(img0,img0s,fid+10))];
- tuv=vec2(trans[0],trans[1])+vec2((mod((uv[0]-0.000000001),1.0)+0.000000001)*float(img1s[0]),(mod(((1.0-uv[1])-0.000000001),1.0)+0.000000001)*float(img1s[1]))*vec2(trans[2],trans[3]);
- vec4 tspec=texelFetch(img1,ivec2(tuv),0);
- trans=atlastrans[int(imgData(img0,img0s,fid+11))];
- tuv=vec2(trans[0],trans[1])+vec2((mod((uv[0]-0.000000001),1.0)+0.000000001)*float(img1s[0]),(mod(((1.0-uv[1])-0.000000001),1.0)+0.000000001)*float(img1s[1]))*vec2(trans[2],trans[3]);
- vec4 temit=texelFetch(img1,ivec2(tuv),0);
- temit=vec4(0);
- vec3 v0c=vec3(imgData(img0,img0s,v0+0),imgData(img0,img0s,v0+1),imgData(img0,img0s,v0+2));
- vec3 v1c=vec3(imgData(img0,img0s,v1+0),imgData(img0,img0s,v1+1),imgData(img0,img0s,v1+2));
- vec3 v2c=vec3(imgData(img0,img0s,v2+0),imgData(img0,img0s,v2+1),imgData(img0,img0s,v2+2));
- vec3 local=rel3point3(v0c,v1c,v2c,a,rel);
- vec3 localo=rel3point3(v0c,v1c,v2c,a,vec3(rel[0],rel[1]+0.1,rel[2]))-local;
- vec3 v0w=rotPointba(v0c,crot)+cloc;
- vec3 v1w=rotPointba(v1c,crot)+cloc;
- vec3 v2w=rotPointba(v2c,crot)+cloc;
- vec3 world=rel3point3(v0w,v1w,v2w,a,rel);
- vec3 v0n=vec3(imgData(img0,img0s,v0+9),imgData(img0,img0s,v0+10),imgData(img0,img0s,v0+11));
- vec3 v1n=vec3(imgData(img0,img0s,v1+9),imgData(img0,img0s,v1+10),imgData(img0,img0s,v1+11));
- vec3 v2n=vec3(imgData(img0,img0s,v2+9),imgData(img0,img0s,v2+10),imgData(img0,img0s,v2+11));
- vec3 normalw=rel3point3(v0n,v1n,v2n,a,rel);
- vec3 normall=rotPointb(normalw,-crot);
- vec3 normalla=normall;//normal map
- vec2 nchange;
- float r;
- /* r=getRotr(vec2(0),uvo);
- r=getRotr(vec2(0),vec2(localo[1],localo[2]))-r;
- r+=(Pi/2.0);
- normall=rotPointb(normall,vec3(r,normalla[2],normalla[1]));
- normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
- normall=rotPointba(normall,vec3(-r,-normalla[2],-normalla[1])); */
- /* r=getRotr(vec2(0),vec2(localo[1],localo[2]));
- r=getRotr(vec2(0),pieRotr(uvo,-r))-(Pi/2.0);
- normall=rotPointb(normall,vec3(r,normalla[2],normalla[1]));
- normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
- normall=rotPointba(normall,vec3(-r,-normalla[2],-normalla[1])); */
- /* r=getRotr(vec2(localo[1],localo[2]),vec2(0))-r;
- r=getRotr(vec2(0),pieRotr(uvo,-r));
- normall=rotPointb(normall,vec3(r-(Pi/2.0),normalla[2],normalla[1]));
- normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
- normall=rotPointba(normall,vec3(-r-(Pi/2.0),-normalla[2],-normalla[1])); */
- //finalcolor=vec4(normall,1);
- //return;
- vec4 ramp[6];
- vec3 colora=vec3(0.7);
- ramp[0]=vec4(0,1,1,1);//1
- ramp[1]=vec4(.1,colora);//.2
- ramp[2]=vec4(.5,1.0-colora);//1
- ramp[3]=vec4(1,colora);//.4
- vec3 color=colorRamp((normall[0]+1.0)/2.0,ramp);
- //finalcolor=vec4(color,1);
- //finalcolor=vec4(colorMix(0.9,vec3(finalcolor),vec3(tcolor)),1)-(dis/100.0);
- vec4 colorb;
- //myskybox(crot,0,vec3(0),s+vec2(normall[1],normall[2]),finalcolor,c,0);
- finalcolor=tcolor;
- if (true){//spec
- vec4 lightcolor;
- vec2 nchange;
- vec3 nrot;//face normal
- vec3 nrota;
- vec3 nvec=-normall;//-vec3(0,s)/2.0;
- vec3 nveca;
- nrot[2]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
- nchange=pieRotr(vec2(nvec[0],nvec[1]),nrot[2]);
- nvec[0]=nchange[0];
- nvec[1]=nchange[1];
- nrot[0]=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
- vec3 fdsdfgb=nrot;
- nveca=rotPointba(-local,nrot);//reflection
- nveca[1]=-nveca[1];
- nveca[2]=-nveca[2];
- //nveca=rotPointba(nveca,-nrot);
- float ra=getRotr(vec2(0),vec2(nveca[0],nveca[2]));
- nchange=pieRotr(vec2(nveca[0],nveca[2]),ra);
- nveca[0]=nchange[0];
- nveca[2]=nchange[1];
- float rb=getRotr(vec2(0),vec2(nveca[0],nveca[1]));
- nchange=pieRotr(vec2(nveca[0],nveca[1]),rb);
- nveca[0]=nchange[0];
- nveca[1]=nchange[1];
- /* nrot=normall;
- nvec=vec3(nrot);
- r=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
- nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
- nvec[1]=nchange[0];
- nvec[2]=nchange[1];
- nrota[0]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
- //nvec=vec3(nrot);
- r=getRotr(vec2(0),vec2(nvec[2],nvec[0]));
- nchange=pieRotr(vec2(nvec[2],nvec[0]),r);
- nvec[2]=nchange[0];
- nvec[0]=nchange[1];
- nrota[1]=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
- //nvec=vec3(nrot);
- r=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
- nchange=pieRotr(vec2(nvec[0],nvec[1]),r);
- nvec[0]=nchange[0];
- nvec[1]=nchange[1];
- nrota[2]=getRotr(vec2(0),vec2(nvec[2],nvec[0])); */
- vec3 rayrot;//=nrota;
- vec4 lightcolora;
- //for (int i=0;i<1;i++){
- for (int i=0;i<int(texelFetch(img0,imgArray(img0s[0],img0s[0]*img0s[1]-3-lights),0).r);i++){
- int lid=dataindex(lights,i);
- /* //vec3 lightvec=vec3(0)-local;
- vec3 lightvec=rotPointb(vec3(27.0,4.0,7.0)-cloc,-crot)-local;
- float lightdis=distance(vec3(0),lightvec);
- vec3 lightcolorb=vec3(1.0);
- float lightsize=1.0;
- float lightint=10.0/lightsize;
- float spotangle=fdrgb*10.0;
- float spotblend=0.0;
- float r; */
- //spotangle=valueRamp(spotangle/360.0,0.0,10.0);
- /* vec4 ramp[6];
- ramp[0]=vec4(0,vec3(99));
- ramp[1]=vec4(1,vec3(0));
- spotangle=colorRamp(spotangle/360.0,ramp)[0]; */
- //vec3 lightvec=vec3(0)-local;
- int lighttype=int(imgData(img0,img0s,lid+0));
- vec3 lightcolorb=vec3(imgData(img0,img0s,lid+1),imgData(img0,img0s,lid+2),imgData(img0,img0s,lid+3));
- float lightsize=imgData(img0,img0s,lid+5);
- float lightint=imgData(img0,img0s,lid+4);//lightsize;
- float spotangle=imgData(img0,img0s,lid+6);
- float spotblend=imgData(img0,img0s,lid+7);
- vec3 lightrota=vec3(imgData(img0,img0s,lid+11),imgData(img0,img0s,lid+12),imgData(img0,img0s,lid+13));
- vec3 lightvec=vec3(imgData(img0,img0s,lid+8),imgData(img0,img0s,lid+9),imgData(img0,img0s,lid+10));
- vec3 lightvecl=rotPointb(vec3(imgData(img0,img0s,lid+8),imgData(img0,img0s,lid+9),imgData(img0,img0s,lid+10))-cloc,-crot)-local;
- float lightdis=distance(vec3(0),lightvecl);
- //float r;
- /*
- lightvec=rotPointba(lightvecl,fdsdfgb);
- nchange=pieRotr(vec2(lightvec[0],lightvec[2]),ra);
- lightvec[0]=nchange[0];
- lightvec[2]=nchange[1];
- nchange=pieRotr(vec2(lightvec[0],lightvec[1]),rb);
- lightvec[0]=nchange[0];
- lightvec[1]=nchange[1];
- r=getRotr(vec2(0),vec2(lightvec[0],lightvec[2]));
- nchange=pieRotr(vec2(lightvec[0],lightvec[2]),r);
- lightvec[0]=nchange[0];
- lightvec[2]=nchange[1];
- r=getRotr(vec2(0),vec2(lightvec[0],lightvec[1]));
- nrota=vec3(abs(r));
- */
- vec3 N = vec3(normall);
- vec3 L = normalize(lightvecl);
- float cosT = max(dot(N, L), 0.0);
- float r = max(length(lightvecl) - lightsize, 0.0);
- float intensity = lightint / (r * r);
- vec3 diffuse = intensity * cosT * vec3(tcolor) / Pi;
- lightcolor.rgb += diffuse;
- //finalcolor= vec4(vec3(((r/Pi)+1.0)/2.0),1);
- //finalcolor=vec4(vec3(1.0-abs(r/Pi)),1);
- //finalcolor=vec4(vec3(normall * .5 + .5),1);
- //return;
- /* nrota=vec3(0);
- nvec=vec3(lightvec);
- vec3 nvecb=vec3(nveca);
- r=getRotr(vec2(nvecb[1],nvecb[2]),vec2(nvec[1],nvec[2]));
- nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
- nvec[1]=nchange[0];
- nvec[2]=nchange[1];
- nchange=pieRotr(vec2(nvecb[1],nvecb[2]),r);
- nvecb[1]=nchange[0];
- nvecb[2]=nchange[1];
- nrota[0]=getRotr(vec2(nvecb[0],nvecb[1]),vec2(nvec[0],nvec[1]));
- //nvec=vec3(lightvec);
- //nvecb=vec3(nveca);
- r=getRotr(vec2(nveca[2],nveca[0]),vec2(lightvec[2],lightvec[0]));
- nchange=pieRotr(vec2(nvec[2],nvec[0]),r);
- nvec[2]=nchange[0];
- nvec[0]=nchange[1];
- nchange=pieRotr(vec2(nvecb[2],nvecb[0]),r);
- nvecb[2]=nchange[0];
- nvecb[0]=nchange[1];
- nrota[1]=getRotr(vec2(nvecb[1],nvecb[2]),vec2(nvec[1],nvec[2])); */
- /* nvec=vec3(lightvec);
- r=getRotr(vec2(0),vec2(lightvec[0],lightvec[1]));
- nchange=pieRotr(vec2(nvec[0],nvec[1]),r);
- nvec[0]=nchange[0];
- nvec[1]=nchange[1];
- nrota[2]=getRotr(vec2(0),vec2(nvec[2],nvec[0])); */
- /* vec3 lightrot=nrota;
- nrota=abs((lightrot-rayrot)/2.0);
- //nrota=vec3(abs((lightrot[1]-rayrot[1])/2.0));
- //nrota=vec3(abs((abs(lightrot[1])-abs(rayrot[1]))/2.0));
- nrota=vec3(abs((lightrot[1]))); */
- //finalcolor=vec4(vec3(((nrota[0]/Pi)+1.0)/2.0),1);
- //return;
- /*
- float rv=((tspec[0]+tspec[1]+tspec[2])/3.0)/10.0;//(1.0+sin(world[0]+world[1]))/4.0;//((tspec[0]/3.0)+(tspec[1]/3.0)+(tspec[2]/3.0))/2.0;
- //float rv=0.01;
- float roughness=(rv+0.005)/2.0;//.01/2.0;//valueRamp(((tspec[0]/3.0)+(tspec[1]/3.0)+(tspec[2]/3.0)),0.3,0.7);
- vec3 angs=vec3(Pi/2.0,0,0);//bAc
- vec3 sides=vec3(0,local[0],lightsize);
- completeTry(1,angs,sides);
- float lightsizeo=angs[2]/Pi/2.0;
- //float lightsizeo=0.0;
- vec4 ramp[6];
- ramp[0]=vec4(0,vec3(0));
- ramp[1]=vec4(.50,vec3(1));
- ramp[2]=vec4(.60,vec3(0));
- ramp[3]=vec4(0);
- float angoff=colorRamp((((nrota[0])/Pi)+1.0)/2.0,ramp)[0];
- nrota=nrota/lightsize;
- ramp[0]=vec4(0,vec3(0));
- ramp[1]=vec4(.5+lightsizeo,vec3(1.0-rv));
- ramp[2]=vec4(.5+roughness+lightsizeo,vec3(0));
- ramp[3]=vec4(0);
- float spec=colorRamp((((nrota[0])/Pi)+1.0)/2.0,ramp)[0];
- vec3 falloff=vec3(lightcolorb*((lightint/(lightdis-lightsize-1.0))));
- if (lighttype==0){
- lightcolora=vec4(colorMix(spec,vec3(finalcolor*angoff)*falloff,(vec3(finalcolor*angoff)*falloff)+(lightcolorb/(lightsize/(lightint/(lightdis-lightsize))))),1);
- }
- if (lighttype==1){
- float blend=(1.0-spotblend)/2.0;
- lightvec=rotPointba(lightvecl,crot);
- lightvec=rotPointb(lightvec,vec3(0.0,Pi/2.0,0.0)+lightrota);
- nrota=vec3(0);
- nvec=vec3(lightvec);
- r=getRotr(vec2(0),vec2(lightvec[1],lightvec[2]));
- nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
- nvec[1]=nchange[0];
- nvec[2]=nchange[1];
- nrota[0]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
- r=nrota[0];
- r=r*spotangle;
- ramp[0]=vec4(0,vec3(0));
- ramp[1]=vec4(.5-blend,vec3(1));
- ramp[2]=vec4(.5+blend,vec3(1));
- ramp[3]=vec4(1,vec3(0));
- ramp[4]=vec4(0);
- float v=colorRamp(((r/Pi)+1.0)/2.0,ramp)[0];
- //lightcolora=vec4(colorMix(0.0,vec3(finalcolor*angoff),vec3(1))*v,1);
- lightcolora=vec4(colorMix(spec,vec3(finalcolor*angoff)*falloff,(vec3(finalcolor*angoff)*falloff)+vec3(1.0/(lightsize/(lightint/(lightdis-lightsize)))))*v,1);
- }
- lightcolor+=lightcolora;
- */
- }
- finalcolor.rgb=lightcolor.rgb;
- return;
- }
- finalcolor=vec4(colorMix(((temit[0]/3.0)+(temit[1]/3.0)+(temit[2]/3.0))*2.0,vec3(finalcolor),vec3(temit)),1);
- //finalcolor=vec4(((tspec[0]/3.0)+(tspec[1]/3.0)+(tspec[2]/3.0)),0,0,1);
- if (false){//hilight
- if (objida==objid){
- finalcolor=vec4(colorMix(0.6,vec3(finalcolor),vec3(0,1,0)),1);
- int size=3;
- for (int x=-size;x<size+1;x++){
- for (int y=-size;y<size+1;y++){
- datacolor=texelFetch(img5,ploci+ivec2(x,y),0);
- numbers[0]=ivec2(0,4);//dis
- numbers[1]=ivec2(0,1);//rel
- numbers[2]=ivec2(0,6);
- numbers[3]=ivec2(0,6);
- numbers[4]=ivec2(0,4);//face
- numbers[5]=ivec2(0,6);//a
- numbers[6]=ivec2(-1);//a
- colorDecode(ivec4(datacolor),numbers);
- float disa=float(numbers[0]);
- vec3 rela=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
- int facea=int(numbers[4]);
- float aa=(float(numbers[5])/9999.0)-2.0;
- int fida=dataindex(faces,facea);
- int objida=int(texelFetch(img0,imgArray(img0s[0],fida+8),0).r);
- //if (facea!=face){
- if (objida!=objid){
- finalcolor=vec4(0,0,0,1);
- }
- }
- }
- }
- }
- if (false){//dbug
- int letters[6];
- letters[0]=11;
- letters[1]=14;
- letters[2]=6;
- letters[3]=-1;
- //debuginfo(finalcolor,letters,int(numbers[5]),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
- //debuginfo(finalcolor,letters,int(abs(r[0]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
- //debuginfo(finalcolor,letters,int(abs(r[1]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,70));
- //debuginfo(finalcolor,letters,int(abs(r[2]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,140));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement