| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 2D Bump (�ä䥪⠥஢®© ¯®¢¥àå®áâ¨).
- c ”¥¤®à –믫 ª®¢
- ‚® ¬®£¨å ¤¥¬® ¨á¯®«ì§ã¥âáï íä䥪â 2D bump (2D ५ì¥ä ), ª®£¤ ¨áâ®ç¨ª ᢥâ (ç é¥ ¢á¥£® ®ªà㦮áâì) ¤¢¨£ ¥âáï ¯® "५ì¥ä®¬ã" íªà ã.
- ‚®â ª ª íâ® ¤¥« ¥âáï:
- Žá¢¥é¥®áâì â®çª¨ § ¢¨á¨â ®â 㣫 ¬¥¦¤ã ®à¬ «ìî ª ¦¤®£® ¯¨ªá¥« , ¨ ¨áâ®ç¨ª®¬ ᢥâ .
- ’ ª ª ª ¢¥ªâ®à ®à¬ «¨ ¨¬¥¥â âਠª®®à¤¨ âë (x,y,z), ¨ ¬ë § ¥¬ ª®®à¤¨ âë x ¨ y, â® z ¢ëç¨á«ï¥âáï ¯® ä®à¬ã«¥ z=1-sqrt(x*x+y*y). …᫨ ¥¯®ïâ®, ®âªã¤ ¢§ï« áì íâ ä®à¬ã« -- ¢ ¬ ¯®à ¢á¯®¬¨âì £¥®¬¥âà¨î ;)
- ’ ª ª ª ¢ ॠ«ì®¬ ¢à¥¬¥¨ íâ® ¡ã¤¥â ®ç¥ì ¬¥¤«¥®, â® á®§¤ îâ § à ¥¥ â ¡«¨æã ¯à¥¤¢ë¡®àª¨, £¤¥ ¤«ï ª ¦¤®£® X ¨ Y ¢ëç¨á«ï¥âáï § 票¥ ¢¥ªâ®à Z. �â â ¡«¨æ §ë¢ ¥âáï enviroment map (ª àâ ®ªà㦥¨ï). �®¤®¡ë¥ ª àâë ¨á¯®«ì§ãîâáï ¨ ¯à¨ ⥪áâãà¨à®¢ ¨¨ "§¥àª «ìëå" ®¡ê¥ªâ®¢ (çâ® ¬®£® ¯à®é¥, 祬 ¯àï¬ ï âà áá¨à®¢ª :) Ž¡ëç® å¢ â ¥â ª àâë à §¬¥à®¬ 256å256. ƒ¥¥à¨âì ¥¥ ¬®¦® ¨ á ¯®¬®éìî 1-sqrt(x^2+y^2), ¨ á ¯®¬®éìî á¨ãᮢ. ‚ ®¡é¥¬ á«ãç ¥ ¬®¦® ¨á¯®«ì§®¢ âì «î¡ãî ¬®¤¥«ì ®á¢¥é¥¨ï - ¢á¥ § ¢¨á¨â ®â ⮣®, çâ® ¢ë å®â¨â¥ ¯®«ãç¨âì :) .
- ‚®â ¯à¨¬¥à ¯®áâ஥¨ï ¯à®á⥩襩 ª àâë:
- int i,j;float x,y;
- int density=128; //à §¬¥à ¯ïâ
- int bright; //ª®«¨ç¥á⢮ ®â⥪®¢
- for (i=0;i<256;i++){
- for (j=0;j<256;j++){
- x=j/density-1;// (¤¥« ¥âáï ¤«ï ⮣®, çâ®¡ë ¯à¨à¢¥á⨠ª®®à¤¨ âë
- y=i/density-1;// ª § ç¥¨ï¬ ®â -1 ¤® 1)
- z=1-sqrt(x*x+y*y);
- z=z<0?z:0;
- envmap[i][j]=z*bright;}}
- ’®çª íªà ¥ ¤«ï ¢ë襯ਢ¥¤¥®£® á«ãç ï à ááç¨âë¢ ¥âáï ¯® ä®à¬ã«¥ result=envmap[X ®à¬ «¨+density][Y ®à¬ «¨+density] (â ª ª ª â®çª ¨¡®«ì襩 ®á¢¥é¥®á⨠«¥¦¨â ¯®á।¨¥ ª àâë ®ªà㦥¨ï)
- �®à¬ «¨ X ¨ Y à ááç¨âë¢ ¥¬ â ª:
- xnorm=screen[x,y]-screen[x+n,y],
- ynorm=screen[x,y]-screen[x,y+n].
-
- ƒ¤¥ n - ç¨á«® ®â (-5 ¤® 5,n!=0) �®«ì訥 ç¨á« ¯à¨¢®¤ïâ ª ᨫ쮬ã ãåã¤è¥¨î ª à⨪¨. (€ ¬®¦¥â ¢ ¬ ¨ ¥ ¤® "¯à ¢¨«ì®¥" ®â®¡à ¦¥¨¥ ? ’®£¤ ¬®¦® ¯à¨¬¥ïâì ¨ ¡®«ì訥 ç¨á« ) � à ¬¥âà n ¢«¨ï¥â "¢ëá®âã ५ì¥ä ". �¥ § ¡ã¤ìâ¥, çâ® ¯à¨ ®âà¨æ ⥫ìëå § 票ïå n ५ì¥ä ¡ã¤¥â "¢¤ ¢«¥ë¬", ¯à¨ n>0 - ¢ë¯ãª«ë¬.)
- �â® ¢á¥ ª á ¥âáï ¥¯®¤¢¨¦®£® ¨áâ®ç¨ª á ª®®à¤¨ â ¬¨ (0,0,-¡¥áª®¥ç®áâì) „«ï ⮣®, çâ®¡ë ¯ï⮠ᢥ⠤¢¨£ «®áì, 㦮 ¢á¥£® «¨èì ¨§ ¯®«ã稢襩áï ®à¬ «¨ ¢ëç¥áâì à §®áâì ª®®à¤¨ â ¯¨ªá¥« (®á¢¥é¥®áâì ª®â®à®£® à ááç¨âë¢ ¥âáï) ¨ ª®®à¤¨ â ¨áâ®ç¨ª ᢥâ . Žª®ç ⥫ì ï ®á¢¥é¥®áâì â®çª¨ ¯®«ãç ¥âáï â ª ï:
- result=envmap[(xnorm-(lx-x))][(ynorm-(lx-y))]
- �®«ã稢襥áï § 票¥ áà ¢¨¢ ¥âáï á £à ¨æ ¬¨ ¤®¯ãá⨬®£® ¤¨ ¯ §® ïમáâ¨, ¨ , ¥á«¨ 㦮, ¨á¯à ¢«ï¥âáï ¢ ᮮ⢥âá⢨¨ á í⮩ £à ¨æ¥©.
- �ਬ¥à.
- lx,ly - ª®®à¤¨ âë ¨áâ®ç¨ª ᢥâ .
- x,y - ª®®à¤¨ âë â®çª¨ íªà ¥ ¨ ¡ ¬¯-⥪áâãà¥.
- b_low,b_max - ¬¨¨¬ «ìë© ¨ ¬ ªá¨¬ «ìë© ¤®ãáâ¨¬ë© ¯®à®£ ®á¢¥é¥®á⨠â®çª¨.
- for (int y=0;y<200;y++){
- for (int x=0;x<320;x++){
- int xn=(bmap[x][y]-bmap[x+1][y])-(lx-x)+density;
- int yn=(bmap[x][y]-bmap[x][y+1])-(ly-y)+density;
- if (xnb_max) xn=b_low;
- if (ynb_max) yn=b_max;
- screen[x][y]=envmap[xn][yn];}}
- ‚®â, ᮡá⢥®, ¨ ¢á¥.
|