'■ まじめにフォグ '■ こっちのほうが圧倒的に軽いですね(^^; '■ しかも32階調です '■ そのうちゲームにするかも clear 50,1360 dim cr(64),cg(64),cb(64) setpers 90 skclose screen 0 L = 5: '<- L: 光源の影響の度合い (0〜15) setlight 0.2,0,1,rgb(16+L,16+L,16+L),rgb(16-L,16-L,16-L) '▼ 岩石定義 ' 頂点の定義 setvertex 0,12,(0,0,-50),(40,6,-23),(10,42,-25),(-34,24,-21) setvertex (-30,-27,-25),(15,-37,-22),(33,25,25),(-22,37,27) setvertex (-44,-8,24),(-7,-42,23),(35,-26,25),(0,0,50) ' 頂点を結んで面を作る setpolygon 0,20,0,,(0,1,2),,(0,2,3),,(0,3,4),,(0,4,5),,(0,5,1) setpolygon ,(1,6,2),,(2,7,3),,(3,8,4),,(4,9,5),,(5,10,1) setpolygon ,(2,6,7),,(3,7,8),,(4,8,9),,(5,9,10),,(1,10,6) setpolygon ,(6,11,7),,(7,11,8),,(8,11,9),,(9,11,10),,(10,11,6) ' フォグの色の設定 br=28:bg=27:bb=31 c = rgb(br,bg,bb) color ,,,c ' ベースとなるテクスチャの定義 r=10:g=4:b=6 for i=0 to 63 cr(i)=r+rnd(4) : cg(i)=g+rnd(4)/2 : cb(i)=b+rnd(4)/2 next ' フォグの度合いを変えたテクスチャを用意 for i=0 to 31 tx$="" for j=0 to 63 r = (br-cr(j))*i/32+cr(j) g = (bg-cg(j))*i/32+cg(j) b = (bb-cb(j))*i/32+cb(j) tx$=tx$+strw$(1,rgbadd(0,r,g,b)+&h8000) next settex i,8,8,32768,tx$ if i>26 then setatr i,20,(0,0,3,i,0,256):'<- 遠距離 : メッシュ else if i>11 then setatr i,20,(0,0,3,i,0,0): '<- 中距離 : 光源処理なし else setatr i,20,(0,0,3,i,0,8): '<- 近距離 : 光源の影響あり endif next ' 面・テクスチャをオブジェクトに割り当てる obn = 30 : '岩石の総数 for i=1 to obn r = rnd(8)+2 objatr i,0,0 : objtype i,4 : objlink i,0 obj(i,@xs)=(rnd(10)/10+0.5)*r,r,r obj(i,@xp)=rnd(8000)-4000,rnd(4000)-2000,5000+rnd(8000) obj(i,@zv)=-rnd(1000)/10-20 obj(i,@xrv)=rnd(10)/1000,rnd(10)/1000 next '▼ メインループ *loop ' オブジェクトの管理 for i=0 to 5 u=(u+1)mod obn ' 画面外に出たオブジェクトの再配置 if obj(u+1,@zp)<-200 then obj(u+1,@xp)=rnd(8000)-4000+px+vx*50,rnd(4000)-2000+py+pv*50,8000 endif ' 距離に応じてフォグの度合い(0〜31)を変える obj(u+1,@atr) = rgbadd(0,(obj(u+1,@zp)-2000)/150,0,0) next ' キー入力 p=pad(0,1) if p and @pad_c then pv=pv-(pv<64) else pv=pv+(pv>-64) py = py + pv if s < 0 then s=rnd(200)+60:vx=rnd(80)-40 else s = s - 1 px = px + vx camera (px,py,-200) to (px,py,0) vsync goto *loop