Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.78 KB | None | 0 0
  1. #version 300 es
  2. //obj=Structure
  3. precision lowp float;//lowp mediump highp
  4.  
  5. uniform sampler2D img0;
  6. uniform sampler2D img1;
  7. uniform sampler2D img2;
  8. uniform sampler2D img3;
  9. uniform sampler2D img4;
  10. uniform sampler2D img5;
  11. uniform sampler2D img6;
  12. uniform sampler2D img7;
  13. uniform ivec2 img0s;
  14. uniform ivec2 img1s;
  15. uniform ivec2 img2s;
  16. uniform ivec2 img3s;
  17. uniform ivec2 img4s;
  18. uniform ivec2 img5s;
  19. uniform ivec2 img6s;
  20. uniform ivec2 img7s;
  21.  
  22. uniform sampler2D skybox;
  23. uniform ivec2 skyboxsize;
  24.  
  25. uniform int mode;
  26. uniform vec2 screensize;
  27. uniform vec3 cloc;
  28. uniform vec3 crot;
  29. uniform vec2 fov;
  30. uniform vec2 focallength;
  31.  
  32. uniform float fdrgb;
  33.  
  34. uniform int bounces;
  35. uniform int samplers;
  36. uniform int frame;
  37.  
  38. uniform vec4 atlastrans[50];
  39. uniform int atlasflip[50];
  40.  
  41. in vec2 v_texCoord;
  42.  
  43. out vec4 finalcolor;
  44.  
  45. const float Pi=3.141592653589793238462643383279502884197169399375105;
  46. const int faces=0;
  47. const int verts=1;
  48. const int objs=2;
  49. const int lights=3;
  50. const int tiles=4;
  51. //2154321 4321543
  52. int numberIndexing(int n,int start,int amout){
  53. int e=10;
  54. for (int c=0;c<start;c++){
  55. e=e*10;
  56. }
  57. int g=e/10;
  58. for (int c=0;c<amout-1;c++){
  59. e=e*10;
  60. }
  61. int d=(n/e)*e;
  62. d=n-d;
  63. return d/g;
  64. }
  65. vec4 colorIncode(ivec2 numbers[28]){ //max6 per color
  66. vec4 colors=vec4(0,0,0,0);
  67. int index=0;
  68. int offset=1000000;
  69. int color=0;
  70. for (int i=0;i<26&&numbers[i][1]>0;i++){
  71. for (int a=0;a<numbers[i][1];a++){
  72. if (index/7==1){
  73. color++;
  74. offset=1000000;
  75. index=0;
  76. }
  77. colors[color]+=float(numberIndexing(numbers[i][0],a,1))/float(offset);
  78. offset=offset/10;
  79. index++;
  80. }
  81. }
  82. return vec4(colors[0],colors[1],colors[2],colors[3])*1000000.0;
  83. }
  84. void colorDecode(ivec4 colors,inout ivec2 numbers[28]){ //max6 per color
  85. int index=0;
  86. int offset=1;
  87. int offseta=0;
  88. int color=0;
  89. for (int i=0;i<28&&numbers[i][1]>-1;i++){
  90. offset=1;
  91. for (int a=0;a<numbers[i][1];a++){
  92. if (index/7==1){
  93. color++;
  94. offseta-=index;
  95. index=0;
  96. }
  97. numbers[i][0]+=numberIndexing(colors[color],a+offseta,1)*offset;
  98. offset=offset*10;
  99. index++;
  100. }
  101. offseta+=numbers[i][1];
  102. }
  103. }
  104. vec3 colorHue(float value){
  105. value=mod(abs(value),1.0);
  106. vec3 rgb=vec3(0.0,0.0,0.0);
  107. if (value<(1.0/3.0)||value==(1.0/3.0)){
  108. rgb[0]=((1.0/3.0)-value)/(1.0/3.0);
  109. rgb[1]=1.0-rgb[0];
  110. }
  111. if (value>(1.0/3.0)&&(value<((1.0/3.0)*2.0)||value==((1.0/3.0)*2.0))){
  112. rgb[1]=((1.0/3.0)-(value-(1.0/3.0)))/(1.0/3.0);
  113. rgb[2]=1.0-rgb[1];
  114. }
  115. if (value>((1.0/3.0)*2.0)){
  116. rgb[2]=((1.0/3.0)-(value-((1.0/3.0)*2.0)))/(1.0/3.0);
  117. rgb[0]=1.0-rgb[2];
  118. }
  119. return rgb;
  120. }
  121. vec2 pieRot(vec2 xy,float angle){//rotate a point around 0,0
  122. angle = angle/180.0*Pi;
  123. float s = sin(angle);
  124. float c = cos(angle);
  125. return vec2(xy[0]*c-xy[1]*s,xy[0]*s+xy[1]*c);
  126. }
  127. vec2 pieRotr(vec2 xy,float angle){//rotate a point around 0,0
  128. float s = sin(angle);
  129. float c = cos(angle);
  130. return vec2(xy[0]*c-xy[1]*s,xy[0]*s+xy[1]*c);
  131. }
  132. float getRot(vec2 at,vec2 to){
  133. return -atan(at[1]-to[1],at[0]-to[0])*180.0/Pi;
  134. }
  135. float getRotr(vec2 at,vec2 to){
  136. return -atan(at[1]-to[1],at[0]-to[0]);
  137. }
  138. vec3 rotPointb(vec3 point,vec3 rot){
  139. vec3 offset=vec3(point);
  140. vec2 fd=pieRotr(vec2(offset[0],offset[1]),rot[2]);//z
  141. offset[0]=fd[0];
  142. offset[1]=fd[1];
  143. fd=pieRotr(vec2(offset[0],offset[2]),rot[1]);//y
  144. offset[0]=fd[0];
  145. offset[2]=fd[1];
  146. fd=pieRotr(vec2(offset[1],offset[2]),rot[0]);//x
  147. offset[1]=fd[0];
  148. offset[2]=fd[1];
  149. return offset;
  150. }
  151. vec3 rotPointba(vec3 point,vec3 rot){
  152. vec3 offset=vec3(point);
  153. vec2 fd=pieRotr(vec2(offset[1],offset[2]),rot[0]);//x
  154. offset[1]=fd[0];
  155. offset[2]=fd[1];
  156. fd=pieRotr(vec2(offset[0],offset[2]),rot[1]);//y
  157. offset[0]=fd[0];
  158. offset[2]=fd[1];
  159. fd=pieRotr(vec2(offset[0],offset[1]),rot[2]);//z
  160. offset[0]=fd[0];
  161. offset[1]=fd[1];
  162. return offset;
  163. }
  164.  
  165. 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
  166. if (mode==0){//sss
  167. angs[0]=acos(((sides[1]*sides[1])+(sides[2]*sides[2])-(sides[0]*sides[0]))/(2.0*sides[1]*sides[2]));
  168. angs[1]=acos(((sides[2]*sides[2])+(sides[0]*sides[0])-(sides[1]*sides[1]))/(2.0*sides[2]*sides[0]));
  169. angs[2]=Pi-angs[0]-angs[1];
  170. }else if (mode==1){//sas bAc
  171. sides[0]=sqrt((sides[2]*sides[2])+(sides[1]*sides[1])-2.0*sides[2]*sides[1]*cos(angs[0]));
  172. angs[2]=asin((sides[2]*sin(angs[0]))/sides[0]);
  173. angs[1]=Pi-angs[0]-angs[2];
  174. }
  175. }
  176.  
  177. float valueRamp(float v,float a, float b){
  178. return (a*(1.0-v))+(b*v);
  179. }
  180. vec3 colorRamp(float v,vec4 ramp[6]){
  181. for (int i=0;i<6;i++){
  182. if (!(v<ramp[i][0])){
  183. if (!(v>ramp[i+1][0])){
  184. v=(v-ramp[i][0])/(ramp[i+1][0]-ramp[i][0]);
  185. vec3 a=vec3(ramp[i][1],ramp[i][2],ramp[i][3]);
  186. vec3 b=vec3(ramp[i+1][1],ramp[i+1][2],ramp[i+1][3]);
  187. return vec3((a*(1.0-v))+(b*v));
  188. }else{
  189. //break;
  190. }
  191. }
  192. }
  193. return vec3(0);
  194. }
  195. vec3 colorMix(float v,vec3 a,vec3 b){
  196. return (a*(1.0-v))+(b*v);
  197. }
  198.  
  199. vec4 edgeBoundingbox(vec4 edge){
  200. vec4 box=vec4(0,0,0,0);
  201. if (edge[0]>edge[2]){;
  202. box[0]=edge[2];
  203. box[2]=edge[0]-edge[2];
  204. }else{
  205. box[0]=edge[0];
  206. box[2]=edge[2]-edge[0];
  207. }if (edge[1]>edge[3]){
  208. box[1]=edge[3];
  209. box[3]=edge[1]-edge[3];
  210. }else{
  211. box[1]=edge[1];
  212. box[3]=edge[3]-edge[1];
  213. }
  214. return box;
  215. }
  216. vec4 intersectionLine(vec4 edge1,vec4 edge2){
  217. float rot1=getRot(vec2(edge1[0],edge1[1]),vec2(edge1[2],edge1[3]));//+((edge1.normal)?180:0)
  218. float rot2=getRot(vec2(edge2[0],edge2[1]),vec2(edge2[2],edge2[3]));//+((edge2.normal)?180:0)
  219. vec2 a1a=vec2(pieRot(vec2(edge1[0],edge1[1]),rot1));
  220. vec2 a1b=vec2(pieRot(vec2(edge1[2],edge1[3]),rot1));
  221. vec2 b1a=vec2(pieRot(vec2(edge2[0],edge2[1]),rot1));
  222. vec2 b1b=vec2(pieRot(vec2(edge2[2],edge2[3]),rot1));
  223. vec2 a2a=vec2(pieRot(vec2(edge2[0],edge2[1]),rot2));
  224. vec2 a2b=vec2(pieRot(vec2(edge2[2],edge2[3]),rot2));
  225. vec2 b2a=vec2(pieRot(vec2(edge1[0],edge1[1]),rot2));
  226. vec2 b2b=vec2(pieRot(vec2(edge1[2],edge1[3]),rot2));
  227. if ((a1b[1]>=b1a[1]&&a1b[1]<=b1b[1])||(a1b[1]<=b1a[1]&&a1b[1]>=b1b[1])){
  228. if ((a2b[1]>=b2a[1]&&a2b[1]<=b2b[1])||(a2b[1]<=b2a[1]&&a2b[1]>=b2b[1])){
  229. vec2 intersecta=vec2(a1b[1]-b1b[1],b1a[1]-a1a[1]);
  230. vec4 box=edgeBoundingbox(vec4(a2a,a2b));
  231. vec2 intersect=vec2(box[0]+(intersecta[0]/(intersecta[0]+intersecta[1])*box[2]),box[1]+(intersecta[1]/(intersecta[0]+intersecta[1])*box[3]));
  232. vec2 intersectb=pieRot(intersect,-rot2);
  233. return vec4(1.0,intersectb[0],intersectb[1],intersecta[0]/(intersecta[0]+intersecta[1]));//true,loc,loc,per
  234. }
  235. }
  236. return vec4(0.0,0.0,0.0,0.0);
  237. }
  238. vec3 pointRel3(vec2 loc,vec2 v0,vec2 v1,vec2 v2,vec4 a){// gets were a point is relitive to a triangle
  239. loc-=v0;
  240. v1-=v0;
  241. v2-=v0;
  242. v0=vec2(0,0);
  243. float r=getRot(v0,v1);
  244. loc=pieRot(loc,r);
  245. v1=pieRot(v1,r);
  246. v2=pieRot(v2,r);
  247.  
  248. vec4 la=vec4(v1[0]*a[1],0,v1[0]*a[1],v2[1]);
  249. vec4 inter;
  250. vec2 v4=vec2(0.0,0.0);
  251. int line=1;
  252. if (v2[0]>la[0]){
  253. inter=intersectionLine(vec4(v1,v2),la);
  254. line=0;
  255. v4=vec2(((v1-v2)*inter[3])+v2);
  256. }else{
  257. inter=intersectionLine(vec4(v0,v2),la);
  258. v4=vec2(((v0-v2)*inter[3])+v2);
  259. }
  260. float dis=loc[1]/v4[1];
  261. return vec3(line,inter[3],dis);
  262. }
  263. vec3 insideEdgeR(vec2 point,vec2 v0,vec2 v1){
  264. float rot=getRot(v0,v1);
  265. vec2 a=pieRot(vec2(v1-v0),rot);
  266. vec2 b=pieRot(vec2(point-v0),rot);
  267. float offset=-0.0;
  268. vec3 c;
  269. c[1]=b[0]/a[0];
  270. c[2]=b[1]-a[1];
  271. if (b[1]>a[1]){
  272. c[0]=1.0;
  273. }
  274. return c;
  275. }
  276. vec4 insideFaceR(vec2 point,vec2 v0,vec2 v1,vec2 v2){// is a point in side of a triangle
  277. vec4 locs=vec4(v0,v0);
  278. if (v1[0]<locs[0]){
  279. locs[0]=v1[0];
  280. }
  281. if (v1[0]>locs[2]){
  282. locs[2]=v1[0];
  283. }
  284. if (v1[1]<locs[1]){
  285. locs[1]=v1[1];
  286. }
  287. if (v1[1]>locs[3]){
  288. locs[3]=v1[1];
  289. }
  290. if (v2[0]<locs[0]){
  291. locs[0]=v2[0];
  292. }
  293. if (v2[0]>locs[2]){
  294. locs[2]=v2[0];
  295. }
  296. if (v2[1]<locs[1]){
  297. locs[1]=v2[1];
  298. }
  299. if (v2[1]>locs[3]){
  300. locs[3]=v2[1];
  301. }
  302. if (point[0]>=locs[0]&&point[0]<=locs[2]&&point[1]>=locs[1]&&point[1]<=locs[3]){
  303. int inside=0;
  304. vec3 b=vec3(0.0,0.0,0.0);
  305. vec3 a0=insideEdgeR(point,v0,v1);
  306. inside+=int(a0[0]);
  307. b[0]=a0[1];
  308.  
  309. vec3 a1=insideEdgeR(point,v1,v2);
  310. inside+=int(a1[0]);
  311. b[1]=a1[1];
  312.  
  313. vec3 a2=insideEdgeR(point,v2,v0);
  314. inside+=int(a2[0]);
  315. b[2]=a2[1];
  316.  
  317. float offset=0.0005;
  318. if (inside==3){//frount/back
  319. return vec4(1.0,b);
  320. }else if (inside==0){//frount/back
  321. return vec4(2.0,b);
  322. }else{
  323. if (a0[0]==a1[0]){
  324. if (abs(a2[2])<offset){
  325. return vec4(1.0,b);
  326. }
  327. }else if (a1[0]==a2[0]){
  328. if (abs(a0[2])<offset){
  329. return vec4(1.0,b);
  330. }
  331. }else if (a0[0]==a2[0]){
  332. if (abs(a1[2])<offset){
  333. return vec4(1.0,b);
  334. }
  335. }
  336. }
  337. }
  338. return vec4(0.0,0.0,0.0,0.0);
  339. }
  340.  
  341. float rel3pointf(float p1,float p2,float p3,float a,vec3 rel){
  342. float a1=((p2-p1)*a)+p1;
  343. float a2=0.0;
  344. if (int(rel[0])==0){
  345. a2=((p2-p3)*rel[1])+p3;
  346. }else{
  347. a2=((p1-p3)*rel[1])+p3;
  348. }
  349. return ((a2-a1)*rel[2])+a1;
  350. }
  351. vec2 rel3point2(vec2 p1,vec2 p2,vec2 p3,float a,vec3 rel){
  352. vec2 a1=vec2(((p2-p1)*a)+p1);
  353. vec2 a2=vec2(0);
  354. if (int(rel[0])==0){
  355. a2=vec2(((p2-p3)*rel[1])+p3);
  356. }else{
  357. a2=vec2(((p1-p3)*rel[1])+p3);
  358. }
  359. return ((a2-a1)*rel[2])+a1;
  360. }
  361. vec3 rel3point3(vec3 p1,vec3 p2,vec3 p3,float a,vec3 rel){
  362. vec3 a1=vec3(((p2-p1)*a)+p1);
  363. vec3 a2=vec3(0);
  364. if (int(rel[0])==0){
  365. a2=vec3(((p2-p3)*rel[1])+p3);
  366. }else{
  367. a2=vec3(((p1-p3)*rel[1])+p3);
  368. }
  369. return ((a2-a1)*rel[2])+a1;
  370. }
  371.  
  372. void myskybox(vec3 crot,int bounce,vec3 vec,vec2 vecoff,inout vec4 color,vec2 c,int mode){
  373. vec3 skyvl[12];
  374. vec2 skyvt[18];
  375. vec3 skyvn[12];
  376. ivec3 skyv[40];
  377. ivec3 skyf[14];
  378.  
  379. skyvl[0]=rotPointb(vec3(-10.000000,10.000000,-10.000000),vec3(-Pi/2.0,0,0));
  380. skyvl[1]=rotPointb(vec3(-10.000000,10.000000,10.000000),vec3(-Pi/2.0,0,0));
  381. skyvl[2]=rotPointb(vec3(10.000000,10.000000,-10.000000),vec3(-Pi/2.0,0,0));
  382. skyvl[3]=rotPointb(vec3(10.000000,10.000000,10.000000),vec3(-Pi/2.0,0,0));
  383. skyvl[4]=rotPointb(vec3(-10.000000,-10.000000,-10.000000),vec3(-Pi/2.0,0,0));
  384. skyvl[5]=rotPointb(vec3(-10.000000,-10.000000,10.000000),vec3(-Pi/2.0,0,0));
  385. skyvl[6]=rotPointb(vec3(10.000000,-10.000000,-10.000000),vec3(-Pi/2.0,0,0));
  386. skyvl[7]=rotPointb(vec3(10.000000,-10.000000,10.000000),vec3(-Pi/2.0,0,0));
  387. skyvl[8]=rotPointb(vec3(9,9,9),vec3(0,Pi/2.0,0));//
  388. skyvl[9]=rotPointb(vec3(-9,9,9),vec3(0,Pi/2.0,0));
  389. skyvl[10]=rotPointb(vec3(-9,-9,9),vec3(0,Pi/2.0,0));
  390. skyvl[11]=rotPointb(vec3(9,-9,9),vec3(0,Pi/2.0,0));
  391. skyvt[0]=vec2(0.250000,0.666667);
  392. skyvt[1]=vec2(0.000001,0.333333);
  393. skyvt[2]=vec2(0.000001,0.666667);
  394. skyvt[3]=vec2(0.500000,0.666667);
  395. skyvt[4]=vec2(0.250000,0.333333);
  396. skyvt[5]=vec2(0.750000,0.666667);
  397. skyvt[6]=vec2(0.500000,0.333333);
  398. skyvt[7]=vec2(1.000000,0.666667);
  399. skyvt[8]=vec2(0.750000,0.333333);
  400. skyvt[9]=vec2(0.750000,1.000000);
  401. skyvt[10]=vec2(0.500000,1.000000);
  402. skyvt[11]=vec2(0.500000,0.000000);
  403. skyvt[12]=vec2(1.000000,0.333333);
  404. skyvt[13]=vec2(0.750000,0.000000);
  405. skyvt[14]=vec2(0,0);//
  406. skyvt[15]=vec2(1,0);
  407. skyvt[16]=vec2(1,1);
  408. skyvt[17]=vec2(0,1);
  409. skyvn[0]=vec3(-0.5773,-0.5773,0.5773);
  410. skyvn[1]=vec3(0.5773,-0.5773,-0.5773);
  411. skyvn[2]=vec3(0.5773,-0.5773,0.5773);
  412. skyvn[3]=vec3(-0.5773,0.5773,0.5773);
  413. skyvn[4]=vec3(-0.5773,-0.5773,-0.5773);
  414. skyvn[5]=vec3(0.5773,0.5773,0.5773);
  415. skyvn[6]=vec3(-0.5773,0.5773,-0.5773);
  416. skyvn[7]=vec3(0.5773,0.5773,-0.5773);
  417. skyvn[8]=vec3(0,0,0);//
  418. skyvn[9]=vec3(0,0,0);
  419. skyvn[10]=vec3(0,0,0);
  420. skyvn[11]=vec3(0,0,0);
  421. skyv[0]=ivec3(3,1,1);
  422. skyv[1]=ivec3(2,2,2);
  423. skyv[2]=ivec3(1,3,3);
  424. skyv[3]=ivec3(7,4,4);
  425. skyv[4]=ivec3(4,5,5);
  426. skyv[5]=ivec3(3,1,1);
  427. skyv[6]=ivec3(5,6,6);
  428. skyv[7]=ivec3(8,7,7);
  429. skyv[8]=ivec3(7,4,4);
  430. skyv[9]=ivec3(1,8,3);
  431. skyv[10]=ivec3(6,9,8);
  432. skyv[11]=ivec3(5,6,6);
  433. skyv[12]=ivec3(1,10,3);
  434. skyv[13]=ivec3(7,4,4);
  435. skyv[14]=ivec3(3,11,1);
  436. skyv[15]=ivec3(6,9,8);
  437. skyv[16]=ivec3(4,12,5);
  438. skyv[17]=ivec3(8,7,7);
  439. skyv[18]=ivec3(3,1,1);
  440. skyv[19]=ivec3(4,5,5);
  441. skyv[20]=ivec3(2,2,2);
  442. skyv[21]=ivec3(7,4,4);
  443. skyv[22]=ivec3(8,7,7);
  444. skyv[23]=ivec3(4,5,5);
  445. skyv[24]=ivec3(5,6,6);
  446. skyv[25]=ivec3(6,9,8);
  447. skyv[26]=ivec3(8,7,7);
  448. skyv[27]=ivec3(1,8,3);
  449. skyv[28]=ivec3(2,13,2);
  450. skyv[29]=ivec3(6,9,8);
  451. skyv[30]=ivec3(1,10,3);
  452. skyv[31]=ivec3(5,6,6);
  453. skyv[32]=ivec3(7,4,4);
  454. skyv[33]=ivec3(6,9,8);
  455. skyv[34]=ivec3(2,14,2);
  456. skyv[35]=ivec3(4,12,5);
  457. skyv[36]=ivec3(9,15,9);//
  458. skyv[37]=ivec3(10,16,10);//
  459. skyv[38]=ivec3(11,17,11);//
  460. skyv[39]=ivec3(12,18,12);//
  461. skyf[0]=ivec3(36,37,38);
  462. skyf[1]=ivec3(36,38,39);
  463. skyf[2]=ivec3(6,7,8);
  464. skyf[3]=ivec3(9,10,11);
  465. skyf[4]=ivec3(12,13,14);
  466. skyf[5]=ivec3(15,16,17);
  467. skyf[6]=ivec3(18,19,20);
  468. skyf[7]=ivec3(21,22,23);
  469. skyf[8]=ivec3(24,25,26);
  470. skyf[9]=ivec3(27,28,29);
  471. skyf[10]=ivec3(30,31,32);
  472. skyf[11]=ivec3(33,34,35);
  473. skyf[12]=ivec3(0,1,2);//
  474. skyf[13]=ivec3(3,4,5);
  475.  
  476. for (int f=0;f<14;f++){
  477. vec3 v0w=skyvl[skyv[skyf[f][0]][0]-1];
  478. vec3 v1w=skyvl[skyv[skyf[f][1]][0]-1];
  479. vec3 v2w=skyvl[skyv[skyf[f][2]][0]-1];
  480. vec3 v0c=rotPointb(v0w,-crot); //cam space
  481. vec3 v1c=rotPointb(v1w,-crot);
  482. vec3 v2c=rotPointb(v2w,-crot);
  483. if (fov[0]<180.0&&fov[1]<180.0){
  484. //if (bounce==0){
  485. v0c=rotPointb(v0c,-vec); //cam space
  486. v1c=rotPointb(v1c,-vec);
  487. v2c=rotPointb(v2c,-vec);
  488. // }
  489. v0c-=vec3(0,vecoff*v0c[0]); //prospective
  490. v1c-=vec3(0,vecoff*v1c[0]);
  491. v2c-=vec3(0,vecoff*v2c[0]);
  492. }else{
  493. v0c=rotPointb(v0c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0))); //cam space
  494. v1c=rotPointb(v1c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0)));
  495. v2c=rotPointb(v2c,-vec3(vec[0],vec[1]-(c[1]*Pi/180.0),vec[2]-(c[0]*Pi/180.0)));
  496. }
  497.  
  498. vec4 a=insideFaceR(vec2(0,0),vec2(v0c[1],v0c[2]),vec2(v1c[1],v1c[2]),vec2(v2c[1],v2c[2]));
  499. if (a[0]==0.0){// not in side
  500. continue;
  501. }
  502. vec3 rel=pointRel3(vec2(0,0),vec2(v0c[1],v0c[2]),vec2(v1c[1],v1c[2]),vec2(v2c[1],v2c[2]),a);
  503.  
  504. float z=rel3pointf(v0c[0],v1c[0],v2c[0],a[1],rel);
  505. if (z<0.0){
  506. continue;
  507. }
  508.  
  509. vec2 v0t=skyvt[skyv[skyf[f][0]][1]-1];
  510. vec2 v1t=skyvt[skyv[skyf[f][1]][1]-1];
  511. vec2 v2t=skyvt[skyv[skyf[f][2]][1]-1];
  512. vec2 uv=rel3point2(v0t,v1t,v2t,a[1],rel);
  513. if (mode==0){
  514. color=texelFetch(skybox,ivec2(uv[0]*float(skyboxsize[0]),(1.0-uv[1])*float(skyboxsize[1])),0);
  515. }else{
  516. //vec3 world=rel3point3(v0w,v1w,v2w,a[1],rel);
  517. //color=vec4(world,0);
  518. vec3 v0n=skyvn[skyv[skyf[f][0]][2]-1];
  519. vec3 v1n=skyvn[skyv[skyf[f][1]][2]-1];
  520. vec3 v2n=skyvn[skyv[skyf[f][2]][2]-1];
  521. vec3 normalw=rel3point3(v0n,v1n,v2n,a[1],rel);
  522. color=vec4(normalw,0);
  523. }
  524. //color=vec4(uv,0,0);
  525. //break;
  526. //1,4,9,16,25
  527.  
  528. if (f==0||f==1){
  529. float size=0.2;
  530. float dis=distance(vec2(.5),uv);
  531. if (dis<size){
  532. float rot=getRotr(vec2(0.5,0.5),vec2(uv));
  533. float d=1.0-(dis/size);
  534. float v=valueRamp(d,0.0,sqrt(Pi*2.0));
  535. v=v*v;
  536. vec2 offset=pieRotr(-vec2(v,0),rot);
  537. crot[1]+=offset[0];
  538. crot[2]+=offset[1];
  539. f=1;
  540. if (v>Pi){///1.5
  541. color=vec4(0,0,0,1);
  542. break;
  543. }else{
  544. continue;
  545. }
  546. continue;
  547. }else{
  548. //vecoff[0]+=dis;
  549. continue;
  550. }
  551. }
  552. break;
  553. }
  554. }
  555.  
  556. ivec2 imgArray(int width,int index){
  557. int y=int(floor(float(index/width)));
  558. int x=index-(width*y);
  559. return ivec2(x,y);
  560. }
  561. int dataindex(int group,int offset){
  562. int index=(img0s[0]*img0s[1])-1;//v
  563. index-=1;//indexindexindex
  564. ivec2 xy=imgArray(img0s[0],index);//imgArray(dataimgwidth,((dataimgwidth*dataimgwidth)-2));
  565. int l=int(texelFetch(img0,xy,0).r);
  566. int range=0;
  567. index-=1;
  568. for (int i=0;i<l;i++){
  569. if (i==group){
  570. break;
  571. }
  572. xy=imgArray(img0s[0],index-i);
  573. range+=int(texelFetch(img0,xy,0).r);
  574. }
  575. //index+=1;
  576. index-=l+range+offset;
  577. xy=imgArray(img0s[0],index);
  578. return int(texelFetch(img0,xy,0).r);//index
  579. }
  580. float imgData(sampler2D img,ivec2 size,int loc){
  581. return texelFetch(img0,imgArray(size[0],loc),0).r;
  582. }
  583.  
  584. void debuginfo(inout vec4 color,int letters[6],int numbers,vec2 pixel,vec2 scale,vec2 loc){
  585. int width=6;
  586. int height=7;
  587. ivec2 size=ivec2(img6s)/ivec2(width,height);
  588. int n[10];
  589. n[0]=0;
  590. n[1]=1;
  591. n[2]=2;
  592. n[3]=3;
  593. n[4]=4;
  594. n[5]=5;
  595. n[6]=6;
  596. n[7]=7;
  597. n[8]=8;
  598. n[9]=9;
  599.  
  600. int l[29];
  601. l[0]=10;
  602. l[1]=11;
  603. l[2]=12;
  604. l[3]=13;
  605. l[4]=16;
  606. l[5]=17;
  607. l[6]=18;
  608. l[7]=19;
  609. l[8]=20;
  610. l[9]=21;
  611. l[10]=22;
  612. l[11]=23;
  613. l[12]=24;
  614. l[13]=25;
  615. l[14]=26;
  616. l[15]=27;
  617. l[16]=28;
  618. l[17]=29;
  619. l[18]=30;
  620. l[19]=31;
  621. l[20]=32;
  622. l[21]=33;
  623. l[22]=34;
  624. l[23]=35;
  625. l[24]=36;
  626. l[25]=37;
  627. l[26]=38;
  628.  
  629. l[27]=14;
  630. l[28]=15;
  631.  
  632. pixel=pixel/scale;
  633. pixel=pixel-loc;
  634.  
  635. int a=0;
  636. for (a;a<6;a++){
  637. if (letters[a]<0){
  638. break;
  639. }
  640. }
  641. pixel[0]-=float(size[0]*a);
  642. for (int i=a-1;i>-1;i--){
  643. ivec2 location=imgArray(width,l[letters[i]])*size;
  644. pixel[0]+=float(size[0]);
  645. if (pixel[0]>0.0&&pixel[0]<float(size[0])&&pixel[1]>0.0&&pixel[1]<float(size[1])){
  646. vec4 v=texelFetch(img6,location+ivec2(pixel),0);
  647. if (v[3]>0.7){
  648. color=vec4(0,1,0,1);
  649. //color=vec4(1.0-vec3(color),1);
  650. break;
  651. }else{
  652. color=color-0.2;
  653. }
  654. }
  655. }
  656. pixel[0]-=float(size[0]*(a+1));
  657.  
  658. pixel[0]-=float(size[0]*6);
  659. for (int i=0;i<6;i++){
  660. int c=numberIndexing(numbers,i,1);
  661. ivec2 location=imgArray(width,n[c])*size;
  662. pixel[0]+=float(size[0]);
  663. if (pixel[0]>0.0&&pixel[0]<float(size[0])&&pixel[1]>0.0&&pixel[1]<float(size[1])){
  664. vec4 v=texelFetch(img6,location+ivec2(pixel),0);
  665. if (v[3]>0.7){
  666. color=vec4(0,1,0,1);
  667. //color=vec4(1.0-vec3(color),1);
  668. break;
  669. }else{
  670. color=color-0.2;
  671. }
  672. }
  673. }
  674. }
  675.  
  676. void main(){
  677. /* finalcolor=texelFetch(img6,ivec2(v_texCoord*screensize),0);
  678. if (finalcolor[3]>0.5){
  679. finalcolor=vec4(1,0,0,1);
  680. }
  681. return; */
  682.  
  683. if (bounces<1){
  684. finalcolor=texelFetch(img0,ivec2(vec2(v_texCoord[0],1.0-v_texCoord[1])*float(img0s)),0);
  685. if (finalcolor[0]!=0.0){
  686. finalcolor=vec4(colorHue(finalcolor[0]/12.0),1);
  687. }
  688. return;
  689. }
  690.  
  691. ivec2 numbers[28];
  692. ivec2 ploci;
  693. vec4 datacolor;
  694.  
  695. vec2 ploc=-(v_texCoord-0.5);
  696. vec2 c;
  697. if (fov[0]<180.0&&fov[1]<180.0){
  698. c=vec2(getRotr(vec2(0),vec2(focallength[0],ploc[0])),getRotr(vec2(0),vec2(focallength[1],ploc[1])));
  699. }else{
  700. c=fov*(v_texCoord-0.5);
  701. }
  702. vec2 s=pieRotr(vec2(0,1),c[0]);//normalize
  703. s[0]+=s[0]*((1.0-s[1])/s[1]);
  704. vec2 sa=pieRotr(vec2(0,1),c[1]);
  705. s[1]=sa[0]+sa[0]*((1.0-sa[1])/sa[1]);
  706.  
  707. ploci=ivec2(vec2(0.5,1.0-0.5)*(screensize/4096.0)*4096.0);
  708. datacolor=texelFetch(img5,ploci,0);
  709. numbers[0]=ivec2(0,4);//dis
  710. numbers[1]=ivec2(0,1);//rel
  711. numbers[2]=ivec2(0,6);
  712. numbers[3]=ivec2(0,6);
  713. numbers[4]=ivec2(0,4);//face
  714. numbers[5]=ivec2(0,6);//a
  715. numbers[6]=ivec2(-1);//a
  716. colorDecode(ivec4(datacolor),numbers);
  717.  
  718. float disa=float(numbers[0]);
  719. vec3 rela=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
  720. int facea=int(numbers[4]);
  721. float aa=(float(numbers[5])/9999.0)-2.0;
  722. //rot=vec2(float(numbers[7])/999.0,float(numbers[8])/999.0)-Pi;
  723.  
  724. int fida=dataindex(faces,facea);
  725. int objida=int(texelFetch(img0,imgArray(img0s[0],fida+8),0).r);
  726.  
  727. vec3 locala;
  728. int obja=dataindex(objs,objida);
  729. int interactable=int(texelFetch(img0,imgArray(img0s[0],obja+0),0).r);
  730. if (interactable==1){
  731. int v0=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+0),0).r));
  732. int v1=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+1),0).r));
  733. int v2=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fida+2),0).r));
  734.  
  735. vec3 v0c=vec3(imgData(img0,img0s,v0+0),imgData(img0,img0s,v0+1),imgData(img0,img0s,v0+2));
  736. vec3 v1c=vec3(imgData(img0,img0s,v1+0),imgData(img0,img0s,v1+1),imgData(img0,img0s,v1+2));
  737. vec3 v2c=vec3(imgData(img0,img0s,v2+0),imgData(img0,img0s,v2+1),imgData(img0,img0s,v2+2));
  738. locala=rel3point3(v0c,v1c,v2c,aa,rela);
  739. if (locala[0]>10.0){
  740. objida=-1;
  741. }
  742. }else{
  743. objida=-1;
  744. }
  745.  
  746.  
  747.  
  748. ploci=ivec2(vec2(v_texCoord[0],1.0-v_texCoord[1])*(screensize/4096.0)*4096.0);
  749. datacolor=texelFetch(img5,ploci,0);
  750. numbers[0]=ivec2(0,4);//dis !!!!!!!!!!!!!
  751. numbers[1]=ivec2(0,1);//rel
  752. numbers[2]=ivec2(0,6);
  753. numbers[3]=ivec2(0,6);
  754. numbers[4]=ivec2(0,4);//face
  755. numbers[5]=ivec2(0,6);//a
  756. numbers[6]=ivec2(-1);//a
  757. colorDecode(ivec4(datacolor),numbers);
  758.  
  759. /* ivec2 numbers[28];
  760. numbers[0]=ivec2(0,3);//rgba
  761. numbers[1]=ivec2(0,3);
  762. numbers[2]=ivec2(0,3);
  763. numbers[3]=ivec2(0,3);
  764. numbers[4]=ivec2(-1);
  765. colorDecode(ivec4(datacolor),numbers);
  766.  
  767. finalcolor=vec4(float(numbers[0])/999.0,float(numbers[1])/999.0,float(numbers[2])/999.0,float(numbers[3])/999.0);
  768. return; */
  769. float dis=float(numbers[0]);
  770. vec3 rel=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
  771. int face=int(numbers[4]);
  772. float a=(float(numbers[5])/9999.0)-2.0;
  773. //vec2 rot=vec2((float(numbers[6])*Pi)/999.0,(float(numbers[7])*Pi)/999.0);
  774.  
  775. if (int(rel[0])==2){//skybox
  776. /* 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));
  777. //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);
  778. if (dis>Pi/2.0){
  779. myskybox(crot,0,vec3(0),s,finalcolor,c,0);
  780. } */
  781. myskybox(crot,0,vec3(0),s,finalcolor,c,0);
  782. /* int letters[6];
  783. letters[0]=11;
  784. letters[1]=14;
  785. letters[2]=6;
  786. letters[3]=-1;
  787. //debuginfo(finalcolor,letters,int(numbers[5]),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
  788. debuginfo(finalcolor,letters,int(abs(mod(abs(crot[2]+Pi),Pi*2.0)-Pi)*100.0),(v_texCoord)*screensize,vec2(.2),vec2(0,0));
  789. */
  790. return;
  791. }
  792.  
  793. /* if (int(rel[0])==0){
  794. finalcolor=vec4(1,1,0,1);
  795. }
  796. if (int(rel[0])==1){
  797. finalcolor=vec4(0,1,1,1);
  798. }
  799. return; */
  800.  
  801. int fid=dataindex(faces,face);
  802. int objid=int(texelFetch(img0,imgArray(img0s[0],fid+8),0).r);
  803. int v0=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+0),0).r));
  804. int v1=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+1),0).r));
  805. int v2=dataindex(verts,int(texelFetch(img0,imgArray(img0s[0],fid+2),0).r));
  806.  
  807. float p1f;
  808. float p2f;
  809. vec2 p12;
  810. vec2 p22;
  811. vec3 p13;
  812. vec3 p23;
  813.  
  814. vec2 v0t=vec2(imgData(img0,img0s,v0+3),imgData(img0,img0s,v0+4));
  815. vec2 v1t=vec2(imgData(img0,img0s,v1+3),imgData(img0,img0s,v1+4));
  816. vec2 v2t=vec2(imgData(img0,img0s,v2+3),imgData(img0,img0s,v2+4));
  817. vec2 uv=rel3point2(v0t,v1t,v2t,a,rel);
  818. vec2 uvo=rel3point2(v0t,v1t,v2t,a,vec3(rel[0],rel[1]+0.1,rel[2]))-uv;
  819. //uv*=4.0;
  820. vec4 trans=atlastrans[int(imgData(img0,img0s,fid+3))];
  821. 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]);
  822. vec4 tcolor=texelFetch(img1,ivec2(tuv),0);
  823. //tcolor=vec4(.5);
  824. trans=atlastrans[int(imgData(img0,img0s,fid+9))];
  825. 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]);
  826. vec4 tnormal=texelFetch(img1,ivec2(tuv),0);
  827. //tnormal=vec4(.5,.5,1,1);
  828. trans=atlastrans[int(imgData(img0,img0s,fid+10))];
  829. 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]);
  830. vec4 tspec=texelFetch(img1,ivec2(tuv),0);
  831. trans=atlastrans[int(imgData(img0,img0s,fid+11))];
  832. 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]);
  833. vec4 temit=texelFetch(img1,ivec2(tuv),0);
  834. temit=vec4(0);
  835. vec3 v0c=vec3(imgData(img0,img0s,v0+0),imgData(img0,img0s,v0+1),imgData(img0,img0s,v0+2));
  836. vec3 v1c=vec3(imgData(img0,img0s,v1+0),imgData(img0,img0s,v1+1),imgData(img0,img0s,v1+2));
  837. vec3 v2c=vec3(imgData(img0,img0s,v2+0),imgData(img0,img0s,v2+1),imgData(img0,img0s,v2+2));
  838. vec3 local=rel3point3(v0c,v1c,v2c,a,rel);
  839. vec3 localo=rel3point3(v0c,v1c,v2c,a,vec3(rel[0],rel[1]+0.1,rel[2]))-local;
  840. vec3 v0w=rotPointba(v0c,crot)+cloc;
  841. vec3 v1w=rotPointba(v1c,crot)+cloc;
  842. vec3 v2w=rotPointba(v2c,crot)+cloc;
  843. vec3 world=rel3point3(v0w,v1w,v2w,a,rel);
  844. vec3 v0n=vec3(imgData(img0,img0s,v0+9),imgData(img0,img0s,v0+10),imgData(img0,img0s,v0+11));
  845. vec3 v1n=vec3(imgData(img0,img0s,v1+9),imgData(img0,img0s,v1+10),imgData(img0,img0s,v1+11));
  846. vec3 v2n=vec3(imgData(img0,img0s,v2+9),imgData(img0,img0s,v2+10),imgData(img0,img0s,v2+11));
  847. vec3 normalw=rel3point3(v0n,v1n,v2n,a,rel);
  848. vec3 normall=rotPointb(normalw,-crot);
  849.  
  850. vec3 normalla=normall;//normal map
  851. vec2 nchange;
  852. float r;
  853. /* r=getRotr(vec2(0),uvo);
  854. r=getRotr(vec2(0),vec2(localo[1],localo[2]))-r;
  855. r+=(Pi/2.0);
  856. normall=rotPointb(normall,vec3(r,normalla[2],normalla[1]));
  857. normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
  858. normall=rotPointba(normall,vec3(-r,-normalla[2],-normalla[1])); */
  859.  
  860. /* r=getRotr(vec2(0),vec2(localo[1],localo[2]));
  861. r=getRotr(vec2(0),pieRotr(uvo,-r))-(Pi/2.0);
  862. normall=rotPointb(normall,vec3(r,normalla[2],normalla[1]));
  863. normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
  864. normall=rotPointba(normall,vec3(-r,-normalla[2],-normalla[1])); */
  865.  
  866. /* r=getRotr(vec2(localo[1],localo[2]),vec2(0))-r;
  867. r=getRotr(vec2(0),pieRotr(uvo,-r));
  868. normall=rotPointb(normall,vec3(r-(Pi/2.0),normalla[2],normalla[1]));
  869. normall=rotPointb(normall,vec3(0,(((((vec2(tnormal[0],1.0-tnormal[1]))-0.5)/2.0*((1.0-tnormal[2])+1.0))*Pi))));
  870. normall=rotPointba(normall,vec3(-r-(Pi/2.0),-normalla[2],-normalla[1])); */
  871.  
  872. //finalcolor=vec4(normall,1);
  873. //return;
  874.  
  875. vec4 ramp[6];
  876. vec3 colora=vec3(0.7);
  877. ramp[0]=vec4(0,1,1,1);//1
  878. ramp[1]=vec4(.1,colora);//.2
  879. ramp[2]=vec4(.5,1.0-colora);//1
  880. ramp[3]=vec4(1,colora);//.4
  881. vec3 color=colorRamp((normall[0]+1.0)/2.0,ramp);
  882. //finalcolor=vec4(color,1);
  883. //finalcolor=vec4(colorMix(0.9,vec3(finalcolor),vec3(tcolor)),1)-(dis/100.0);
  884. vec4 colorb;
  885. //myskybox(crot,0,vec3(0),s+vec2(normall[1],normall[2]),finalcolor,c,0);
  886. finalcolor=tcolor;
  887.  
  888. if (true){//spec
  889. vec4 lightcolor;
  890. vec2 nchange;
  891. vec3 nrot;//face normal
  892. vec3 nrota;
  893. vec3 nvec=-normall;//-vec3(0,s)/2.0;
  894. vec3 nveca;
  895. nrot[2]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
  896. nchange=pieRotr(vec2(nvec[0],nvec[1]),nrot[2]);
  897. nvec[0]=nchange[0];
  898. nvec[1]=nchange[1];
  899. nrot[0]=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
  900.  
  901. vec3 fdsdfgb=nrot;
  902.  
  903. nveca=rotPointba(-local,nrot);//reflection
  904. nveca[1]=-nveca[1];
  905. nveca[2]=-nveca[2];
  906. //nveca=rotPointba(nveca,-nrot);
  907.  
  908. float ra=getRotr(vec2(0),vec2(nveca[0],nveca[2]));
  909. nchange=pieRotr(vec2(nveca[0],nveca[2]),ra);
  910. nveca[0]=nchange[0];
  911. nveca[2]=nchange[1];
  912.  
  913. float rb=getRotr(vec2(0),vec2(nveca[0],nveca[1]));
  914. nchange=pieRotr(vec2(nveca[0],nveca[1]),rb);
  915. nveca[0]=nchange[0];
  916. nveca[1]=nchange[1];
  917.  
  918. /* nrot=normall;
  919.  
  920. nvec=vec3(nrot);
  921. r=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
  922. nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
  923. nvec[1]=nchange[0];
  924. nvec[2]=nchange[1];
  925. nrota[0]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
  926.  
  927. //nvec=vec3(nrot);
  928. r=getRotr(vec2(0),vec2(nvec[2],nvec[0]));
  929. nchange=pieRotr(vec2(nvec[2],nvec[0]),r);
  930. nvec[2]=nchange[0];
  931. nvec[0]=nchange[1];
  932. nrota[1]=getRotr(vec2(0),vec2(nvec[1],nvec[2]));
  933.  
  934. //nvec=vec3(nrot);
  935. r=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
  936. nchange=pieRotr(vec2(nvec[0],nvec[1]),r);
  937. nvec[0]=nchange[0];
  938. nvec[1]=nchange[1];
  939. nrota[2]=getRotr(vec2(0),vec2(nvec[2],nvec[0])); */
  940.  
  941. vec3 rayrot;//=nrota;
  942.  
  943. vec4 lightcolora;
  944. //for (int i=0;i<1;i++){
  945. for (int i=0;i<int(texelFetch(img0,imgArray(img0s[0],img0s[0]*img0s[1]-3-lights),0).r);i++){
  946. int lid=dataindex(lights,i);
  947.  
  948. /* //vec3 lightvec=vec3(0)-local;
  949. vec3 lightvec=rotPointb(vec3(27.0,4.0,7.0)-cloc,-crot)-local;
  950. float lightdis=distance(vec3(0),lightvec);
  951. vec3 lightcolorb=vec3(1.0);
  952. float lightsize=1.0;
  953. float lightint=10.0/lightsize;
  954. float spotangle=fdrgb*10.0;
  955. float spotblend=0.0;
  956. float r; */
  957.  
  958. //spotangle=valueRamp(spotangle/360.0,0.0,10.0);
  959. /* vec4 ramp[6];
  960. ramp[0]=vec4(0,vec3(99));
  961. ramp[1]=vec4(1,vec3(0));
  962. spotangle=colorRamp(spotangle/360.0,ramp)[0]; */
  963.  
  964. //vec3 lightvec=vec3(0)-local;
  965. int lighttype=int(imgData(img0,img0s,lid+0));
  966. vec3 lightcolorb=vec3(imgData(img0,img0s,lid+1),imgData(img0,img0s,lid+2),imgData(img0,img0s,lid+3));
  967. float lightsize=imgData(img0,img0s,lid+5);
  968. float lightint=imgData(img0,img0s,lid+4);//lightsize;
  969. float spotangle=imgData(img0,img0s,lid+6);
  970. float spotblend=imgData(img0,img0s,lid+7);
  971. vec3 lightrota=vec3(imgData(img0,img0s,lid+11),imgData(img0,img0s,lid+12),imgData(img0,img0s,lid+13));
  972. vec3 lightvec=vec3(imgData(img0,img0s,lid+8),imgData(img0,img0s,lid+9),imgData(img0,img0s,lid+10));
  973. vec3 lightvecl=rotPointb(vec3(imgData(img0,img0s,lid+8),imgData(img0,img0s,lid+9),imgData(img0,img0s,lid+10))-cloc,-crot)-local;
  974. float lightdis=distance(vec3(0),lightvecl);
  975. //float r;
  976. /*
  977. lightvec=rotPointba(lightvecl,fdsdfgb);
  978.  
  979. nchange=pieRotr(vec2(lightvec[0],lightvec[2]),ra);
  980. lightvec[0]=nchange[0];
  981. lightvec[2]=nchange[1];
  982. nchange=pieRotr(vec2(lightvec[0],lightvec[1]),rb);
  983. lightvec[0]=nchange[0];
  984. lightvec[1]=nchange[1];
  985. r=getRotr(vec2(0),vec2(lightvec[0],lightvec[2]));
  986. nchange=pieRotr(vec2(lightvec[0],lightvec[2]),r);
  987. lightvec[0]=nchange[0];
  988. lightvec[2]=nchange[1];
  989. r=getRotr(vec2(0),vec2(lightvec[0],lightvec[1]));
  990.  
  991. nrota=vec3(abs(r));
  992. */
  993. vec3 N = vec3(normall);
  994. vec3 L = normalize(lightvecl);
  995. float cosT = max(dot(N, L), 0.0);
  996.  
  997. float r = max(length(lightvecl) - lightsize, 0.0);
  998. float intensity = lightint / (r * r);
  999.  
  1000. vec3 diffuse = intensity * cosT * vec3(tcolor) / Pi;
  1001. lightcolor.rgb += diffuse;
  1002. //finalcolor= vec4(vec3(((r/Pi)+1.0)/2.0),1);
  1003. //finalcolor=vec4(vec3(1.0-abs(r/Pi)),1);
  1004. //finalcolor=vec4(vec3(normall * .5 + .5),1);
  1005. //return;
  1006.  
  1007. /* nrota=vec3(0);
  1008. nvec=vec3(lightvec);
  1009. vec3 nvecb=vec3(nveca);
  1010. r=getRotr(vec2(nvecb[1],nvecb[2]),vec2(nvec[1],nvec[2]));
  1011. nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
  1012. nvec[1]=nchange[0];
  1013. nvec[2]=nchange[1];
  1014. nchange=pieRotr(vec2(nvecb[1],nvecb[2]),r);
  1015. nvecb[1]=nchange[0];
  1016. nvecb[2]=nchange[1];
  1017. nrota[0]=getRotr(vec2(nvecb[0],nvecb[1]),vec2(nvec[0],nvec[1]));
  1018.  
  1019. //nvec=vec3(lightvec);
  1020. //nvecb=vec3(nveca);
  1021. r=getRotr(vec2(nveca[2],nveca[0]),vec2(lightvec[2],lightvec[0]));
  1022. nchange=pieRotr(vec2(nvec[2],nvec[0]),r);
  1023. nvec[2]=nchange[0];
  1024. nvec[0]=nchange[1];
  1025. nchange=pieRotr(vec2(nvecb[2],nvecb[0]),r);
  1026. nvecb[2]=nchange[0];
  1027. nvecb[0]=nchange[1];
  1028. nrota[1]=getRotr(vec2(nvecb[1],nvecb[2]),vec2(nvec[1],nvec[2])); */
  1029.  
  1030. /* nvec=vec3(lightvec);
  1031. r=getRotr(vec2(0),vec2(lightvec[0],lightvec[1]));
  1032. nchange=pieRotr(vec2(nvec[0],nvec[1]),r);
  1033. nvec[0]=nchange[0];
  1034. nvec[1]=nchange[1];
  1035. nrota[2]=getRotr(vec2(0),vec2(nvec[2],nvec[0])); */
  1036.  
  1037. /* vec3 lightrot=nrota;
  1038.  
  1039. nrota=abs((lightrot-rayrot)/2.0);
  1040. //nrota=vec3(abs((lightrot[1]-rayrot[1])/2.0));
  1041. //nrota=vec3(abs((abs(lightrot[1])-abs(rayrot[1]))/2.0));
  1042. nrota=vec3(abs((lightrot[1]))); */
  1043. //finalcolor=vec4(vec3(((nrota[0]/Pi)+1.0)/2.0),1);
  1044. //return;
  1045.  
  1046.  
  1047. /*
  1048. 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;
  1049. //float rv=0.01;
  1050. 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);
  1051.  
  1052. vec3 angs=vec3(Pi/2.0,0,0);//bAc
  1053. vec3 sides=vec3(0,local[0],lightsize);
  1054. completeTry(1,angs,sides);
  1055. float lightsizeo=angs[2]/Pi/2.0;
  1056. //float lightsizeo=0.0;
  1057.  
  1058. vec4 ramp[6];
  1059. ramp[0]=vec4(0,vec3(0));
  1060. ramp[1]=vec4(.50,vec3(1));
  1061. ramp[2]=vec4(.60,vec3(0));
  1062. ramp[3]=vec4(0);
  1063. float angoff=colorRamp((((nrota[0])/Pi)+1.0)/2.0,ramp)[0];
  1064.  
  1065. nrota=nrota/lightsize;
  1066.  
  1067. ramp[0]=vec4(0,vec3(0));
  1068. ramp[1]=vec4(.5+lightsizeo,vec3(1.0-rv));
  1069. ramp[2]=vec4(.5+roughness+lightsizeo,vec3(0));
  1070. ramp[3]=vec4(0);
  1071. float spec=colorRamp((((nrota[0])/Pi)+1.0)/2.0,ramp)[0];
  1072. vec3 falloff=vec3(lightcolorb*((lightint/(lightdis-lightsize-1.0))));
  1073.  
  1074. if (lighttype==0){
  1075. lightcolora=vec4(colorMix(spec,vec3(finalcolor*angoff)*falloff,(vec3(finalcolor*angoff)*falloff)+(lightcolorb/(lightsize/(lightint/(lightdis-lightsize))))),1);
  1076. }
  1077.  
  1078. if (lighttype==1){
  1079. float blend=(1.0-spotblend)/2.0;
  1080.  
  1081. lightvec=rotPointba(lightvecl,crot);
  1082. lightvec=rotPointb(lightvec,vec3(0.0,Pi/2.0,0.0)+lightrota);
  1083.  
  1084. nrota=vec3(0);
  1085. nvec=vec3(lightvec);
  1086. r=getRotr(vec2(0),vec2(lightvec[1],lightvec[2]));
  1087. nchange=pieRotr(vec2(nvec[1],nvec[2]),r);
  1088. nvec[1]=nchange[0];
  1089. nvec[2]=nchange[1];
  1090. nrota[0]=getRotr(vec2(0),vec2(nvec[0],nvec[1]));
  1091.  
  1092. r=nrota[0];
  1093.  
  1094. r=r*spotangle;
  1095. ramp[0]=vec4(0,vec3(0));
  1096. ramp[1]=vec4(.5-blend,vec3(1));
  1097. ramp[2]=vec4(.5+blend,vec3(1));
  1098. ramp[3]=vec4(1,vec3(0));
  1099. ramp[4]=vec4(0);
  1100. float v=colorRamp(((r/Pi)+1.0)/2.0,ramp)[0];
  1101. //lightcolora=vec4(colorMix(0.0,vec3(finalcolor*angoff),vec3(1))*v,1);
  1102. lightcolora=vec4(colorMix(spec,vec3(finalcolor*angoff)*falloff,(vec3(finalcolor*angoff)*falloff)+vec3(1.0/(lightsize/(lightint/(lightdis-lightsize)))))*v,1);
  1103. }
  1104. lightcolor+=lightcolora;
  1105. */
  1106. }
  1107.  
  1108. finalcolor.rgb=lightcolor.rgb;
  1109. return;
  1110. }
  1111.  
  1112. finalcolor=vec4(colorMix(((temit[0]/3.0)+(temit[1]/3.0)+(temit[2]/3.0))*2.0,vec3(finalcolor),vec3(temit)),1);
  1113. //finalcolor=vec4(((tspec[0]/3.0)+(tspec[1]/3.0)+(tspec[2]/3.0)),0,0,1);
  1114.  
  1115. if (false){//hilight
  1116. if (objida==objid){
  1117. finalcolor=vec4(colorMix(0.6,vec3(finalcolor),vec3(0,1,0)),1);
  1118.  
  1119. int size=3;
  1120. for (int x=-size;x<size+1;x++){
  1121. for (int y=-size;y<size+1;y++){
  1122. datacolor=texelFetch(img5,ploci+ivec2(x,y),0);
  1123. numbers[0]=ivec2(0,4);//dis
  1124. numbers[1]=ivec2(0,1);//rel
  1125. numbers[2]=ivec2(0,6);
  1126. numbers[3]=ivec2(0,6);
  1127. numbers[4]=ivec2(0,4);//face
  1128. numbers[5]=ivec2(0,6);//a
  1129. numbers[6]=ivec2(-1);//a
  1130. colorDecode(ivec4(datacolor),numbers);
  1131.  
  1132. float disa=float(numbers[0]);
  1133. vec3 rela=vec3(int(float(numbers[1])),float(numbers[2])/999.0,float(numbers[3])/999.0);
  1134. int facea=int(numbers[4]);
  1135. float aa=(float(numbers[5])/9999.0)-2.0;
  1136.  
  1137. int fida=dataindex(faces,facea);
  1138. int objida=int(texelFetch(img0,imgArray(img0s[0],fida+8),0).r);
  1139. //if (facea!=face){
  1140. if (objida!=objid){
  1141. finalcolor=vec4(0,0,0,1);
  1142. }
  1143. }
  1144. }
  1145. }
  1146. }
  1147.  
  1148. if (false){//dbug
  1149. int letters[6];
  1150. letters[0]=11;
  1151. letters[1]=14;
  1152. letters[2]=6;
  1153. letters[3]=-1;
  1154. //debuginfo(finalcolor,letters,int(numbers[5]),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
  1155. //debuginfo(finalcolor,letters,int(abs(r[0]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,0));
  1156. //debuginfo(finalcolor,letters,int(abs(r[1]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,70));
  1157. //debuginfo(finalcolor,letters,int(abs(r[2]*100.0)),(v_texCoord)*screensize,vec2(.5),vec2(0,140));
  1158. }
  1159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement