2dBump 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 2D Bump (�ä䥪⠭¥à®¢­®© ¯®¢¥àå­®áâ¨).
  2. c ”¥¤®à –믫 ª®¢
  3. ‚® ¬­®£¨å ¤¥¬® ¨á¯®«ì§ã¥âáï íä䥪â 2D bump (2D ५ì¥ä ), ª®£¤  ¨áâ®ç­¨ª á¢¥â  (ç é¥ ¢á¥£® ®ªà㦭®áâì) ¤¢¨£ ¥âáï ¯® "५ì¥ä­®¬ã" íªà ­ã.
  4. ‚®â ª ª íâ® ¤¥« ¥âáï:
  5. Žá¢¥é¥­­®áâì â®çª¨ § ¢¨á¨â ®â 㣫  ¬¥¦¤ã ­®à¬ «ìî ª ¦¤®£® ¯¨ªá¥« , ¨ ¨áâ®ç­¨ª®¬ ᢥâ .
  6. ’ ª ª ª ¢¥ªâ®à ­®à¬ «¨ ¨¬¥¥â âਠª®®à¤¨­ âë (x,y,z), ¨ ¬ë §­ ¥¬ ª®®à¤¨­ âë x ¨ y, â® z ¢ëç¨á«ï¥âáï ¯® ä®à¬ã«¥ z=1-sqrt(x*x+y*y). …᫨ ­¥¯®­ïâ­®, ®âªã¤  ¢§ï« áì íâ  ä®à¬ã«  -- ¢ ¬ ¯®à  ¢á¯®¬­¨âì £¥®¬¥âà¨î ;)
  7. ’ ª ª ª ¢ ॠ«ì­®¬ ¢à¥¬¥­¨ íâ® ¡ã¤¥â ®ç¥­ì ¬¥¤«¥­­®, â® á®§¤ îâ § à ­¥¥ â ¡«¨æã ¯à¥¤¢ë¡®àª¨, £¤¥ ¤«ï ª ¦¤®£® X ¨ Y ¢ëç¨á«ï¥âáï §­ ç¥­¨¥ ¢¥ªâ®à  Z. �â  â ¡«¨æ  ­ §ë¢ ¥âáï enviroment map (ª àâ  ®ªà㦥­¨ï). �®¤®¡­ë¥ ª àâë ¨á¯®«ì§ãîâáï ¨ ¯à¨ ⥪áâãà¨à®¢ ­¨¨ "§¥àª «ì­ëå" ®¡ê¥ªâ®¢ (çâ® ­ ¬­®£® ¯à®é¥, 祬 ¯àﬠï âà áá¨à®¢ª  :) Ž¡ëç­® 墠⠥⠪ àâë à §¬¥à®¬ 256å256. ƒ¥­¥à¨âì ¥¥ ¬®¦­® ¨ á ¯®¬®éìî 1-sqrt(x^2+y^2), ¨ á ¯®¬®éìî ᨭãᮢ. ‚ ®¡é¥¬ á«ãç ¥ ¬®¦­® ¨á¯®«ì§®¢ âì «î¡ãî ¬®¤¥«ì ®á¢¥é¥­¨ï - ¢á¥ § ¢¨á¨â ®â ⮣®, çâ® ¢ë å®â¨â¥ ¯®«ãç¨âì :) .
  8. ‚®â ¯à¨¬¥à ¯®áâ஥­¨ï ¯à®á⥩襩 ª àâë:
  9. int i,j;float x,y;
  10. int density=128; //à §¬¥à ¯ïâ­ 
  11. int bright; //ª®«¨ç¥á⢮ ®â⥭ª®¢
  12. for (i=0;i<256;i++){
  13. for (j=0;j<256;j++){
  14. x=j/density-1;// (¤¥« ¥âáï ¤«ï ⮣®, çâ®¡ë ¯à¨à¢¥á⨠ª®®à¤¨­ âë
  15. y=i/density-1;// ª §­ ç¥­¨ï¬ ®â -1 ¤® 1)
  16. z=1-sqrt(x*x+y*y);
  17. z=z<0?z:0;
  18. envmap[i][j]=z*bright;}}
  19. ’®çª  ­  íªà ­¥ ¤«ï ¢ë襯ਢ¥¤¥­­®£® á«ãç ï à ááç¨â뢠¥âáï ¯® ä®à¬ã«¥ result=envmap[X ­®à¬ «¨+density][Y ­®à¬ «¨+density] (â ª ª ª â®çª  ­ ¨¡®«ì襩 ®á¢¥é¥­­®á⨠«¥¦¨â ¯®á।¨­¥ ª àâë ®ªà㦥­¨ï)
  20. �®à¬ «¨ X ¨ Y à ááç¨â뢠¥¬ â ª:
  21. xnorm=screen[x,y]-screen[x+n,y],
  22. ynorm=screen[x,y]-screen[x,y+n].
  23. ƒ¤¥ n - ç¨á«® ®â (-5 ¤® 5,n!=0) �®«ì訥 ç¨á«  ¯à¨¢®¤ïâ ª ᨫ쭮¬ã ãåã¤è¥­¨î ª à⨭ª¨. (€ ¬®¦¥â ¢ ¬ ¨ ­¥ ­ ¤® "¯à ¢¨«ì­®¥" ®â®¡à ¦¥­¨¥ ? ’®£¤  ¬®¦­® ¯à¨¬¥­ïâì ¨ ¡®«ì訥 ç¨á« ) � à ¬¥âà n ¢«¨ï¥â ­  "¢ëá®âã ५ì¥ä ". �¥ § ¡ã¤ìâ¥, çâ® ¯à¨ ®âà¨æ â¥«ì­ëå §­ ç¥­¨ïå n ५ì¥ä ¡ã¤¥â "¢¤ ¢«¥­­ë¬", ¯à¨ n>0 - ¢ë¯ãª«ë¬.)
  24. �â® ¢á¥ ª á ¥âáï ­¥¯®¤¢¨¦­®£® ¨áâ®ç­¨ª  á ª®®à¤¨­ â ¬¨ (0,0,-¡¥áª®­¥ç­®áâì) „«ï ⮣®, çâ®¡ë ¯ïâ­® á¢¥â  ¤¢¨£ «®áì, ­ã¦­® ¢á¥£® «¨èì ¨§ ¯®«ã稢襩áï ­®à¬ «¨ ¢ëç¥áâì à §­®áâì ª®®à¤¨­ â ¯¨ªá¥«  (®á¢¥é¥­­®áâì ª®â®à®£® à ááç¨â뢠¥âáï) ¨ ª®®à¤¨­ â ¨áâ®ç­¨ª  ᢥâ . Žª®­ç â¥«ì­ ï ®á¢¥é¥­­®áâì â®çª¨ ¯®«ãç ¥âáï â ª ï:
  25. result=envmap[(xnorm-(lx-x))][(ynorm-(lx-y))]
  26. �®«ã稢襥áï §­ ç¥­¨¥ áà ¢­¨¢ ¥âáï á £à ­¨æ ¬¨ ¤®¯ãá⨬®£® ¤¨ ¯ §®­  ïમáâ¨, ¨ , ¥á«¨ ­ã¦­®, ¨á¯à ¢«ï¥âáï ¢ ᮮ⢥âá⢨¨ á í⮩ £à ­¨æ¥©.
  27. �ਬ¥à.
  28. lx,ly - ª®®à¤¨­ âë ¨áâ®ç­¨ª  ᢥâ .
  29. x,y - ª®®à¤¨­ âë â®çª¨ ­  íªà ­¥ ¨ ­  ¡ ¬¯-⥪áâãà¥.
  30. b_low,b_max - ¬¨­¨¬ «ì­ë© ¨ ¬ ªá¨¬ «ì­ë© ¤®ãáâ¨¬ë© ¯®à®£ ®á¢¥é¥­­®á⨠â®çª¨.
  31. for (int y=0;y<200;y++){
  32. for (int x=0;x<320;x++){
  33. int xn=(bmap[x][y]-bmap[x+1][y])-(lx-x)+density;
  34. int yn=(bmap[x][y]-bmap[x][y+1])-(ly-y)+density;
  35. if (xnb_max) xn=b_low;
  36. if (ynb_max) yn=b_max;
  37. screen[x][y]=envmap[xn][yn];}}
  38. ‚®â, ᮡá⢥­­®, ¨ ¢á¥.