ç§ã¯ãã€ããã¯ã©ã·ãã¯ãª90幎代ã®äžäººç§°ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã奜ãã§ããã
386çªç®ã® Doomã§äœæéã座ã£ãŠéãããŸãããã320x200ã®åªããè§£å床ã§3Dã°ã©ãã£ãã¯ã¹ããªã¢ã«ã¿ã€ã ã§ç»é¢äžã«ã¬ã³ããªã³ã°ããã³ãŒãã誰ããã©ããã£ãŠæžãããã«ã·ã§ãã¯ãåããŸããã ç§ã¯å°ãããã°ã©ãã³ã°ãç¥ã£ãŠããŸããïŒç§ã¯BASICãç¿ãå§ããã°ããã§ãïŒã®ã§ãããã¯ãããªã¡ã¢ãªãŒã«æžã蟌ãŸããæ°åŠãšãã€ãã®æã«ãããªãããšã«æ°ä»ããŸããã ã§ãåœæã¯ãé
åã§ããããªãè€éãªæŠå¿µã ã£ãã®ã§ã3Dã¬ã³ããªã³ã°ã®è€éããçè§£ããããšããã§ããŸããã§ããã
åœæãä»ã®æ¹æ³ããªãã£ãããã誰ããæåãã3Dãšã³ãžã³ãäœæããŸããã ãããã仿¥ã§ã¯ã3Dã¬ã³ããªã³ã°ããžãã¯ããŒãããäœæããããšã¯æªãèãã§ãã
ãšãŠãæªãã è»èŒªã®çºæã®ããã«ïŒ èšå€§ãªæ°ã®3Dãšã³ãžã³ãšã©ã€ãã©ãªã¯ãèªåã§ã§ããããšããããã¹ããšæé©åãã¯ããã«åªããŠãããããåççãªéçºè
ãç¬èªã®ãšã³ãžã³ã®äœæãéå§ããçç±ã¯ãããŸããã
å Žåã«ã®ã¿...ã¿ã€ã ãã·ã³ã§90å¹Žä»£ã«æ»ãããšæ³åããŠãã ãããOpenGLãšDirectXããªãããããªããã»ããµããããŸããã§ããã æã£ãŠããã®ã¯ãCPUãšãã¯ã»ã«ã§ãã£ã±ãã®ç»é¢ã ãã§ãã ãã¹ãŠãèªåã§æžãå¿
èŠããããŸãã
ãã®èããããªãã«ãšã£ãŠè峿·±ããšæãããªããããªãã¯äžäººã§ã¯ãããŸããïŒããã¯ãŸãã«TIC-80ã®ãããªæ¶ç©ºã®ã³ã³ãœãŒã«ã§ã§ããããšã§ãã
ãã®ã³ã³ãœãŒã«çšã®ç§ã®æåã®ã²ãŒã ã§ãã
8ãããã®ãã³ããæžããåŸïŒ
åã®èšäºã§èªãããšãã§ããŸãïŒãæ°ããã²ãŒã ã®ã¢ã€ãã¢ãæ¢ãå§ããŸããã ãã®ãããåçŽãª3Dãšã³ãžã³ããŒãããèšè¿°ãããã®äžã«æå°éã®äžäººç§°ã·ã¥ãŒãã£ã³ã°ã²ãŒã ãäœæããã¿ã¹ã¯ãèªåã§èšå®ããããšã«ããŸããã
ãããç§ãFPS80ãæžãå§ããæ¹æ³ã§ãã
ãã®èšäºã§ã¯ãFPS80ã§ã®3Dã¬ã³ããªã³ã°ããã»ã¹ã«ã€ããŠèª¬æãããã®åŒ±ããã·ã³ã§é«é3Dã¬ã³ããªã³ã°ãå®è£
ããéã®é床ïŒããã³ç¡éã®æãããããã¯ïŒïŒã確ä¿ããããã®ãã¹ãŠã®ãã¬ãŒããªãã«ã€ããŠå°ã説æããŸãã
3Dã®åºæ¬
3Dã¬ã³ããªã³ã°ãã©ã®ããã«æ©èœããããæ¢ã«ç¥ã£ãŠããå Žåããã®ã»ã¯ã·ã§ã³ã¯éå±ã«æããŸãã ããã«æ¬¡ã®ã»ã¯ã·ã§ã³ã«é²ãããšãã§ããŸãïŒãã®èšäºã§ã¯3Dã°ã©ãã£ãã¯ã¹ã®å®å
šãªèª¬æã¯é·ããããããç®çã«éèŠãªãã®ãç°¡åã«ç¢ºèªããŸãã
3Dã°ã©ãã£ãã¯ã¹ã®åºæ¬çãªèãæ¹ã¯ã3D空éã2DãµãŒãã§ã¹ïŒã³ã³ãã¥ãŒã¿ãŒç»é¢ïŒã«æåœ±ããããšã§ãã èšãæãããšã3Dãšã³ãžã³ã®äž»ãªã¿ã¹ã¯ã®1ã€ã¯ãæå®ããã座æš
ïŒxãyãzïŒã«å¯ŸããŠãç»é¢äžã®ãã€ã³ã
ãããå Žæã®2D座æšç©ºé
ïŒxãyïŒå
ã®ãã€ã³ããèŠã€ããããšã§ãã
ãã®ããã3Dãšã³ãžã³ã¯äžé£ã®å€æãå®è¡ããŸãã 倿ã¯ãããã座æšç³»ããå¥ã®åº§æšç³»ãžã®å€æããšãã衚çŸã®ç°¡åãªå®çŸ©ã§ãã 倿ã¯ãã¢ãŒã·ã§ã³ïŒåããå転ãã¹ã±ãŒã«ïŒãšæåœ±ã衚ãããšãã§ããŸãã éåžžããããã¯è¡åã§è¡šãããŸãã
ãã€ã³ãã®ã¹ã¯ãªãŒã³äœçœ®ãèšç®ããã«ã¯ããŸãã¢ãã«ãããªãã¯ã¹
Mã«åŸã£ãŠããã倿ããäžçã®ç©ºéã«å€æããå¿
èŠããããŸãã æ¬¡ã«ãã«ã¡ã©ã®äœçœ®ãèæ
®ããããã«
Vã®è¡åãä¹ç®ããã«ã¡ã©ã®äœçœ®ïŒãŸãã¯ç®ïŒã«å€æããŸãã æ¬¡ã«ãå°åœ±è¡åPãé©çšããŸããããã¯ãè¿ãã®ãªããžã§ã¯ãã倧ãããé ãã®ãªããžã§ã¯ããå°ããããéèŠå€æãå®è¡ããŸãã ãã®åŸãèŠç¹ãåå²ããŠããã€ã³ããç»é¢ïŒãã¥ãŒããŒãïŒã®åº§æšã«å€æããŸãïŒ
p '= P * V * M * pãã®äžé£ã®æäœããã€ã³ãã«é©çšããããšã¯ãå€ãã®å Žåããã€ã³ãã®ãæåœ±ããšåŒã°ããŸãã ããããã·ãŒã³ã¯ãããã§ã¯ãªããªããžã§ã¯ãã§æ§æãããŠããããã3Dãšã³ãžã³ã¯ãã以äžã®ããšãè¡ããŸãã
3Dãªããžã§ã¯ãã¯ããªãŽã³ã§æ§æãããŸãã ããããæç»ããããã«ããšã³ãžã³ã¯éåžžãããªãŽã³ãäžè§åœ¢ã«åå²ããäžèšã®åŒã䜿çšããŠåäžè§åœ¢ã®åé ç¹ãæåœ±ããç»é¢äžã®ç»é¢ã¹ããŒã¹ã®çµæã®äžè§åœ¢ãæç»ããŸãã ãã®ããã»ã¹ã¯ã©ã¹ã¿ãŒåãšåŒã°ããŸãããã¯ã¿ãŒã·ã§ã€ãïŒäžè§åœ¢ïŒããã©ã¹ã¿ãŒã·ã§ã€ãïŒç»é¢ãã¯ã»ã«èªäœïŒãžã®å€æã§ãã ããããäžè§åœ¢ãã©ã³ãã ãªé åºã§æããšãè¯ãçµæãåŸãããŸããã é ãäžè§åœ¢ãäžå€®ã«æãããŠããããšã倿ããå¯èœæ§ãããããããšã³ãžã³ã¯ãã®ãããªåé¡ã解決ããããã®æŠç¥ã䜿çšããå¿
èŠããããŸãã éåžžã¯ãããªãŽã³ãäºåã«äžŠã¹æ¿ããããåãã¯ã»ã«ã®æ·±åºŠã衚瀺çšã«æžã蟌ãŸããæ·±åºŠãããã¡ãŒãäœæããããšã§è§£æ±ºãããŸããããã«ããããã€ããã€ãã¯ã»ã«ãæç»ããããç¥ãããšãã§ããŸãã
ãã¯ã¹ãã£ãããã³ã°ãšã©ã€ãã£ã³ã°ã远å ããŸããããã¯ããã¯ã»ã«ã®æçµçãªè²ãèšç®ããããã«ãšã³ãžã³ãèšç®ãããã1ã€ã®æ°åŠã¬ã€ã€ãŒã§ãã
å®å
šãª3Dãå¿
èŠã§ããïŒ
æ£çŽãªãšãããç§ã¯äžèšã®å®å
šãª3Dã°ã©ãã£ãã¯ã¹äœæããã»ã¹ãå®è£
ãå§ããŸããããTIC-80ã§ã¯é
ãããããšã«æ°ä»ããŸããã å€ãPCãšåæ§ã«ããã¹ãŠã®æ°åŠçãªèšç®ãšã¬ã³ããªã³ã°ã¯CPUãç°¡åã«éè² è·ã«ããŠã²ãŒã ãé
ãããå¯èœæ§ããããŸãã ãã¯ã¹ãã£ãéãåãããå転ãã¥ãŒãã4ã€ã ãæç»ããäŸãäœæããŸããããããã§ããã¬ãŒã ã¬ãŒãã10 fpsæªæºã«ããã«ã¯ååã§ããã ããã«3Dããæ©èœããªãããšãæããã«ãªããŸããã ç¹ã«ã
å
å¡«çã¯ãããã«ããã¯ãã«ãªããŸãããã€ãŸããåé¡ã¯äž»ã«æåœ±ç¹ã®æ°åŠã«ãããŸããã§ããããäžè§åœ¢ã®ãã¹ãŠã®ãã¯ã»ã«ãç»é¢ã«æç»ããã®ã«ãããæéãç¹ã«ããªãŽã³ãç»é¢ã®éè€éšåãå æããŸãã
ããããå®å
šãª3Dãå¿
èŠã§ããïŒ å®éã90幎代ã®å€ãã®å€ãã²ãŒã ã¯ããã«3Dããå®çŸããŠããŸããã 代ããã«ãã°ã©ãã£ãã¯ã¹ãå¶éããããªãããŒãªã¡ã«ããºã ãå®è£
ããŠãã³ã¹ããåæžããŸãã
ããã§ãããã«ç§ãå°å
¥ããå¶éããããŸãïŒ
- å
šäœã®ã¬ãã«ã¯ãã©ããã§ããéæ®µããããããã«ã³ããŒã2éãªã©ã¯ãããŸããã ã€ãŸããåºãšå€©äºã®é«ãã¯äžå®ã§ãã
- ãã¹ãŠã®å£ã¯ãåºãã倩äºãŸã§åãé«ãã§ãã ãããŠããããã¯ãã¹ãŠäžéæã§ãã
- ãã¬ã€ã€ãŒã¯ã©ã®æ¹åã«ãåããå€ããããšãã§ããŸãããé ãäžäžå·Šå³ã«åŸããããšã¯ã§ããŸããã èšãæãããšãã«ã¡ã©ã®å転ã®èªç±åºŠã¯1ã€ã ãã§ãïŒ courseãŸãã¯yaw ã
- ãã¹ãŠã®ãªããžã§ã¯ãã¯ããã«ããŒãããšããŠæç»ãããŸããã€ãŸãã2Dç»åã¯åžžã«ã«ã¡ã©ã«åããããããã«3D空éã«æç»ãããŸãã
- ç¹å
æºã®ã¿ããããŸãã ãããã®1ã€ã¯åžžã«ã«ã¡ã©å
ã«ãããŸãïŒãã¬ãŒã€ãŒã®æã«ããããŒãã®ããã«ïŒã ä»ã®ãã®ã¯ãããšãã°ççºã®åœ±é¿ã®ããã«ãçæéã§äœæã§ããŸãã
ãããã®å¶éã¯ã©ã®ããã«åœ¹ç«ã¡ãŸããïŒ
åºãšå€©äºãäžå®ã®é«ããæã¡ããã¹ãŠã®å£ãåºãã倩äºãžãšç§»åããïŒãããŠãã¬ã€ã€ãŒãäžäžã«èŠãããšãã§ããªãïŒãšããäºå®ã¯ãç§ãã¡ã«ãšã£ãŠéåžžã«åœ¹ç«ã€çŽ æŽãããç¹æ§ãçã¿åºããŸãïŒXã¹ã¯ãªãŒã³ã®åäœçœ®ã«ã¯1ã€ã®å£ãããããŸããã ã€ãŸãã衚瀺ããããã¹ãŠã®å£ãç»é¢ã®äžå€®ãå ãã2ã€ã®ç°ãªãå£ãåãX座æšãå ããããšã¯ãããŸããã
å£ãããèŠãããããããã«ãããŸããŸãªè²ã§ãã€ã©ã€ãããŸãã
ã芧ã®ãšãããã¹ã¯ãªãŒã³ã·ã§ããã«ã¯6ã€ã®å£ãããïŒãã¢ã¯ãå£ãã§ããããŸãïŒããããã¯ãã¹ãŠç»é¢äžã«éåžžã«äŸ¿å©ã«é
眮ãããŠããŸããç»é¢ã®åX座æšã¯1ã€ã®å£ã®ã¿ã«å¯Ÿå¿ããŸãã
ããã¯ãå£ã2段éã§ã¬ã³ããªã³ã°ã§ãããããéåžžã«äŸ¿å©ã§ãã
- åX座æšã«è¡šç€ºããå£ã決å®ããŸãïŒèšãæãããšãX座æšããå£ãžã®ããããäœæããŸãïŒã
- ïŒäžåºŠã ãïŒïŒãã¹ãŠã®X座æšãåã£ãŠãå£ã®å¿
èŠãªéšåããšã«æç»ããŸãã
ãšã³ãã£ãã£ïŒãªããžã§ã¯ãïŒ-ã¢ã³ã¹ã¿ãŒãè²ãæ±ãåŽæ°Žãæšãªã©-ã«ã¯ããã䜿çšããã
ãã«ããŒãæè¡ã䜿çšããŸãã ãšã³ãã£ãã£ã¯å®éã®3Dãªããžã§ã¯ãã§ã¯è¡šçŸãããŸãããæ®µããŒã«ããåãåã£ãå³åœ¢ãšããŠã3D座æšã§å¹³ããª2Dç»åãæç»ããã ãã§ãã ãã®ã¡ãœããã¯ãã¬ã³ããªã³ã°æã«éåžžã«å®äŸ¡ã§ãã
æåœ±æé
éåžžã«åçŽåããã3Dã®äžçã§ããã3D空éãã2Dã«ãã€ã³ããæåœ±ããå¿
èŠããããŸãã ãã ããç§ãã¡ã®å¶éã«ãããæ°åŠçèšç®ã¯ã¯ããã«ç°¡åãã€é«éã«åŠçãããŸãã å®å
šãªè¡åä¹ç®ãè¡ã代ããã«ãã¯ããã«ç°¡åãªæ¹æ³ã§ãããè¡ãããšãã§ããŸãïŒè¡åèšç®ã®äžå€éšåïŒãã¬ãŒã€ãŒãŸãã¯ãªããžã§ã¯ãã®äœçœ®ã«äŸåããªãéšåïŒãå®çŸ©ããåçŽã«ä»¥åã«èšç®ãããå€ãã³ãŒãã«æ¿å
¥ããŸãã ãã®ãã¹ãŠã«ã€ããŠç°¡åã«èª¬æããŸããã詳现ãªèšç®ã«èå³ãããå Žåã¯ã次ã®
ããã«è¡šç€ºãããŸã ã
åŒãèŠããŠãããŠãã ããïŒ
p '= P * V * M * pããã§ãp 'ã¯ç»é¢åº§æšïŒåºåïŒã§ãããpã¯äžç座æšïŒå
¥åïŒã§ãã åçŽãªã¢ãã«ã§ã¯ãMã¯æçè¡åïŒãã¹ãŠãã¯ãŒã«ã空éã§è¡šãããŸãïŒãã€ãŸããæ¬¡ã®ããã«ãªããŸãã
p '= P * V * på¯èŠæ§ãããªãã¯ã¹Vã¯ãã«ã¡ã©ãç§»åããã³å転ããã ãã§èšç®ã§ããŸãããã«ã¡ã©ã¯Yè»žã«æ²¿ã£ãå転ã®ã¿ã«ãã£ãŠå¶éãããŸãã
p '= P * R * T * på°åœ±è¡åPã¯ãã²ãŒã å
šäœãéããŠäžå®ã§ããã¹ã³ãŒããšãã¢/ãã¡ãŒã¯ãªããã³ã°ãã¬ãŒã³ã®ã¿ã«äŸåãããããäºåã«èšç®ã§ããŸãã èšç®ãåçŽåããçµæãçµæãšããŠãããªãåçŽãªïŒã³ãŒãã§èšå®ããã®ããã¹ãŠé£ããå ŽåïŒæåœ±é¢æ°ã«ãªããŸãã
function S3Proj(x,y,z) local c,s,a,b=S3.cosMy,S3.sinMy,S3.termA,S3.termB local px=0.9815*c*x+0.9815*s*z+0.9815*a local py=1.7321*y-1.7321*S3.ey local pz=s*xz*cb-0.2 local pw=x*sz*cb local ndcx,ndcy=px/abs(pw),py/abs(pw) return 120+ndcx*120,68-ndcy*68,pz end
次ã®ããžãã¯ãã³ããŒãèŠãŠãã ããïŒ0.9815ã1.7321ãªã©ã ãããã¯ãã¹ãŠãäºåã«æºåããããããªãã¯ã¹èšç®ããååŸãããŸãã ããèªäœã§ã¯ãçŽæçãªå€ã¯ãããŸããïŒãããã£ãŠã宿°ã«å€æããããšããããŸããã§ããïŒã
倿°
cosMy ã
sinMy ã
termAããã³
termBã¯ã颿°ãåŒã³åºãåã«ã«ã¡ã©ã®çŸåšã®åããšå転ããèšç®ãããŸãããã¹ãŠã®ãã€ã³ãã«å¯ŸããŠäžåºŠã ãèšç®ããã°ååã ããã§ãã
å£ã®ã¬ã³ããªã³ã°
æåã®æ®µéã§ã¯ã
H-BufïŒæ°Žå¹³ãããã¡ãŒïŒãšåŒã°ããé
åã䜿çšããŸããããã¯ãç»é¢ã®åX座æšã«äœãæç»ãããããæ±ºå®ããŸãã ãH-Bufãã¯éæšæºã®åŒç§°ã§ãããç§èªèº«ãçºæããŸããã HïŒæ°Žå¹³ïŒããã³BufïŒãããã¡ãŒïŒã§ãããããH-BufãšåŒã°ããŸãã ååãçºæãããšããç§ã¯ããŸãç¬åµçã§ã¯ãããŸããã
TIC-80ç»é¢ã«ã¯240åïŒ240x136ïŒãå«ãŸããŠãããããH-Bufã«ã¯240ã®äœçœ®ããããŸãã åäœçœ®ã¯ç»é¢ã®X座æšã«å¯Ÿå¿ããããã«å£ã®ã©ã®éšåãæç»ãããã«é¢ããæ
å ±ãå«ãŸããŠããŸãã ç©äºãåçŽåããããã«ãç§ã¯ãããã1ãã¯ã»ã«å¹
ã®å£ãã§ã¯ãªã
ãå£ã«ããããšåŒã³ãŸãã ã€ãŸããH-Bufã®åäœçœ®ã¯ãç»é¢ã®åX座æšã§æç»ããå£ã®ã»ã¯ã·ã§ã³ã«é¢ããæ
å ±ãæäŸããŸãã
- å£ïŒãªããžã§ã¯ãïŒïŒ -ããã¯ããã®ã¹ã©ã€ã¹ã«æç»ãããå£ãžã®ãªã³ã¯ã§ãã
- zïŒæµ®åïŒïŒ -ãã®ã¹ã©ã€ã¹ã®ç»é¢ç©ºéïŒæ·±ãïŒã®z座æšã
- ãªã©ãªã©...ããããä»ã®ãšããã¯ããã«ã€ããŠè©±ããŸãããïŒ
å°ãªããšãæåã®æ®µéã§ã¯ãããã§ååã§ãã ãã®ãããã¬ãã«ã®ãã¹ãŠã®å£ãç§»åããå¿
èŠããããŸãïŒããã«ããã®æäœããã广çã«ããæ¹æ³ã«ã€ããŠèª¬æããŸãïŒã åå£ã«ã€ããŠïŒ
- æåœ±é¢æ°ãåé
ã§äœ¿çšããŠãç»é¢äžã®ã©ãã«è¡šç€ºãããããæ±ºå®ããŸãïŒå·Šxãå³xãå·Šäžyãå·Šäžyãå³äžyãå³äžyãå·ŠzïŒæ·±ãïŒãå³zïŒæ·±ãïŒã
- å£ã®åX座æšïŒleft_xããright_xãŸã§ïŒãå·¡åãã ãã®æ·±ãã H-Bufã®ãã®äœçœ®ã«ããæ¢åã®ã»ã¯ã·ã§ã³ãããå°ããå Žåãå£ã®ã»ã¯ã·ã§ã³ãH-Bufã«æžã蟌ã¿ãŸãã
æåã®ãã¹ãããã®ã¹ã©ã€ã¹ã®æ·±ãã¯æ¢åã®ã¹ã©ã€ã¹ã®
æ·±ããããå°ãããã¯ã
æ·±ããã¹ããšåŒã°ããŸãã ããã«ãããå£ãæ£ããé åºã§ã¬ã³ããªã³ã°ã§ããŸãããã¬ãŒã€ãŒã«æãè¿ãå£ãé ãå£ãšéãªããŸãã é¢é£ããã³ãŒãã¹ãããããæ¬¡ã«ç€ºããŸãã
function _AddWallToHbuf(hbuf,w) local startx=max(S3.VP_L,S3Round(w.slx)) local endx=min(S3.VP_R,S3Round(w.srx)) local step local nclip,fclip=S3.NCLIP,S3.FCLIP startx,endx,step=_S3AdjHbufIter(startx,endx) if not startx then return end for x=startx,endx,step do
åå£ã«å¯ŸããŠãã®æäœãå®è¡ãããšãH-Bufã«ã¯åX座æšã§ã¬ã³ããªã³ã°ããã¹ã©ã€ã¹ã«é¢ããæ£ããæ
å ±ãå«ãŸããŸããã€ãŸããã¬ã³ããªã³ã°ããããã«å¿
èŠãªå£ã®æ£ããéšåãåšæçã«ã¬ã³ããªã³ã°ããã ãã§ãã ããã«ããããã®ã¢ãããŒãã¯è¿
éã§ããããšãããããŸãããå£ãæããšããââé
å»¶ãäœåãªäœæ¥ã¯ãããŸãããããã§æç»ããã¿ããããå¿
èŠããããã¯ã»ã«ã®ã¿ãã¿ããããå¿
èŠãããããšã¯ç¢ºãã§ãã ç§ãã¡ã®åœã§ã¯ãæåã«å£ã®äžéšãæããŠããã®äžã«å¥ã®å£ãæãããšã¯ãããŸããïŒåæç»ãªãïŒã
ãããã¬ã³ããªã³ã°ã³ãŒãã§ãã ãããããã«åçŽãã«æ³šæããŠãã ããïŒåXã«å¯ŸããŠããã®X座æšã§ãã¯ã¹ãã£åãã¬ã³ããªã³ã°ããã ãã§ããã以äžã¯äœãããŸããïŒ
function _S3RendHbuf(hbuf) local startx,endx,step=_S3AdjHbufIter(S3.VP_L,S3.VP_R) if not startx then return end for x=startx,endx,step do local hb=hbuf[x+1]
éåžžã«å¥åŠãªããªãã¯ã§ãã¬ãŒã ã¬ãŒãã2åã«ãã
TIC-80ã®è§£å床ã¯240x136ãããããŸããããæéããŸã£ããç¡é§ã«ãããæç»ããå
å®¹ãæ£ç¢ºã«ææ¡ããŠããŠããç»é¢
å
šäœã衚瀺ãããšCPUé»åã®ããªãã®éšåãæ¶è²»ããŸãã åçŽãªã·ãŒã³ã§ã¯æéã®ã¬ã³ããªã³ã°ã¢ã«ãŽãªãºã ã§ãçŽ30 fpsãçæããŸãããããè€éãªã·ãŒã³ã§ã¯åšæ³¢æ°ã倧å¹
ã«äœäžããŸãã
ãã®åé¡ãã©ã®ããã«åé¿ããŸããïŒ
èªåããå¿
èŠããããŸããç»é¢
å
šäœãåããå¿
èŠãããã®ã§ããããã ããããå¿
èŠãããŸããã 人éã®ç®ã¯ãåãã®éãã€ãã³ãã®æ¬ ç¹ããæ»ããã«ãããŸãïŒã¬ããã²ãŒã ããã¬ã€ãã人ã¯å°ããªèŠèŠçãªãã°ãªãããã«éåžžã«å¯å€§ã§ãïŒïŒããããã£ãŠãåãã¬ãŒã ã®ç»é¢ã®
ååã ããåããããšã§ã¬ã³ããªã³ã°ãé«éåã§ããŸãã
次ã®ããšãè¡ããŸãã
- å¶æ°ãã¬ãŒã ã§ã¯ãXã®å¶æ°åº§æšã®ã¿ãæç»ããŸãã
- 奿°ãã¬ãŒã ã§ã¯ãXã®å¥æ°åº§æšã®ã¿ãæç»ããŸãã
ãã®ããã»ã¹ã¯ã
ã€ã³ã¿ãŒã¬ãŒã¹ã¬ã³ããªã³ã°ãšãåŒã°ã
ãŸã ã ã€ãŸããåãã¬ãŒã ã§ã¯ã240x136å
šäœã§ã¯ãªãã120x136ãã¯ã»ã«ã®ã¿ãå®éã«ã¬ã³ããªã³ã°ãããŸãã åãã¬ãŒã ã§ç»é¢ãã¯ãªã¢ããªããããæç»ããªããã¯ã»ã«ã¯åã®ãã¬ãŒã ã®æ®ããšããŠåçŽã«ä¿åãããŸãã
ããã¯ãç¹ã«éãåãã§ãå°ããªç®ã«èŠãããã°ãªããããåŒãèµ·ãããŸãããå®éã«ã¯ãããã¯ãã¬ãç»é¢ã«ã¬ãããªæããäžããããã«å¯ŸããŠã§ã¯ãªã
ãã²ãŒã ã«å¯ŸããŠæ©èœããŸãã
以äžã¯ãå®éã«åãã¬ãŒã ãã¬ã³ããªã³ã°ãããã®ã§ãïŒå°ãªããšããä»ã®åãåã®ãã¬ãŒã ã®ãã¯ã»ã«ã§ãŸã æºããããŠããªããã°è¡šç€ºãããŸãïŒã
1ãã¬ãŒã ã®ã€ã³ã¿ãŒã¬ãŒã¹ã¬ã³ããªã³ã°ã ãããããããããããã¬ã³ããªã³ã°ãããŠããªãåã¯ç©ºçœã®ãŸãŸã«ããŸãã å®éãåã®ãã¬ãŒã ã®ã¬ã³ããªã³ã°çµæã§åããããŸãããŠã©ãŒã«ã¹ã©ã€ã¹ã¬ã³ããªã³ã°
ããŠãããã§å£ã®ã¹ã©ã€ã¹ã®ã¬ã³ããªã³ã°ã«ç§»ããŸãã ã©ã®ã¹ã©ã€ã¹ãã¬ã³ããªã³ã°ãããã¯ãã§ã«ããã£ãŠãããã©ãã«ãããã¯ããã£ãŠããŸãã å®è¡ããå¿
èŠãããã®ã¯ããã®åã«ã¬ã³ããªã³ã°ãããã¯ã»ã«ãšãã¯ã»ã«ã®è²ã決å®ããããšã ãã§ãã ã©ããã£ãŠããã®ïŒ
å£ã¹ã©ã€ã¹ïŒ1ãã¯ã»ã«ã®åãã®å£ã®åçŽãã¯ã»ã«åïŒã- å
æºãšè·é¢ãèæ
®ããŠããã®ã¹ã©ã€ã¹ãžã®ç
§æã®å
¥å°ãèšç®ããŸãã
- ãã¯ã¹ãã£ã®æ°Žå¹³åº§æšãèšç®ããŠãå£ãåãåããŸãïŒé è¿è£æ£ã䜿çšïŒã
- å£ã®çµç¹ãè£éããŠãã¹ã©ã€ã¹ã®äžäžã®Y座æšãèšç®ããŸãã
- åãã¯ã»ã«ãäžããäžã«å¡ãã€ã¶ããŸããã€ãŸãããã¯ã¹ãã£ã®åçŽåº§æšã決å®ãïŒã¢ãã£ã³å€æïŒããã¯ã¹ãã£ããµã³ããªã³ã°ããæ¬¡ã«ç
§æãå€èª¿ããæåŸã«ãã¯ã»ã«ãç»é¢ã«æžã蟌ã¿ãŸãã
ç»é¢ã«å¯Ÿããå£ãåžžã«åçŽã«ç«ã£ãŠããããããã¯ã¹ãã£ã®åçŽåº§æšã®ã¢ãã£ã³å€æãè¡ãããšãã§ããŸãïŒèŠç¹ã®èгç¹ããæ£ãã倿ã®ä»£ããã«ïŒïŒããã¯ããã¬ã€ã€ãŒãé ãäžäžå·Šå³ã«åããããšãã§ããªãããä¿èšŒãããŸãïŒã ç¶æ³ãç°ãªãå Žåãæ°Žå¹³ãšåçŽã®äž¡æ¹ã®ãã¯ã¹ãã£åº§æšã«å¯ŸããŠæ£ãããã¯ã¹ãã£ãããã³ã°ãå®è£
ããå¿
èŠããããŸãããããã¯é
ããªããŸãã
ãšã³ãã£ãã£ã®ã¬ã³ããªã³ã°ïŒã¹ãã³ã·ã«ãããã¡ãŒã远å ïŒïŒ
ããŠãå£ã¯æ¥œããã§ããããšã³ãžã³ã¯æµã®ããªãã²ãŒã ã«ã¯ãªããŸããã åè¿°ããããã«ãæµã¯ãã«ããŒãã®ããã«ã¬ã³ããªã³ã°ãããŸããã€ãŸãããããŒãã£ã³ã°ç»åãšããŠãåžžã«ãã¬ã€ã€ãŒã«åããããŸãã
ãã«ããŒããšããŠæããããšã³ãã£ãã£ïŒåžžã«ã«ã¡ã©ã«åããããŸãïŒããã ãããããã®ç»åã¯åãªã2次å
ã§ã¯ãããŸããã空éã®ç¹å®ã®ãã€ã³ãã§æç»ãããããã
depthããããŸãã æµãå£ãè¶ããå Žåãå£ã¯æµã®åã«ã¬ã³ããªã³ã°ãããªããã°ãªããïŒæµã¯å£ã«ãã£ãŠãããã¯ãããªããã°ãªããŸããïŒããã以å€ã¯äœãããŸããã
ãã®å¹æãéæããæ¹æ³ã¯ïŒ
ç©äºãåçŽåããå Žåã¯
ãã¢ãŒãã£ã¹ãã®ã¢ã«ãŽãªãºã ã䜿çšã§ããŸãïŒããã¯ãã¢ã«ãŽãªãºã ã®æ¬ åŠã«äŒŒãŠããŸãïŒããªããžã§ã¯ããåŸãããåã«æãã ãã§ã忝ã®ãªããžã§ã¯ãã¯èªç¶ã«èæ¯ã®ãªããžã§ã¯ãã®äžã«æãããç®çã®å¹æãåŸãããŸãã
圌ã®äœãæªãã®ïŒ ããããããã æžããããã ããã...ç¹ã«å
å¡«é床ãå¶éãããŠããTIC-80ã§ã¯
éåžžã«é
ãã§ãã ãã®ãããªå®è£
ã§ã¯ãåŸã§ä»ã®ãã¯ã»ã«ã§ç°¡åã«èŠãããããã«ãçŸãããã¯ã¹ãã£åãããç
§ãããããã¯ã»ã«ã®ã¬ã³ããªã³ã°ã«å€ãã®ãªãœãŒã¹ãè²»ãããŸãã
ãããŠãããã§ãæ°ãããããã¡ãã¹ãã³ã·ã«ãããã¡ãå°å
¥ããå¿
èŠããããŸãã 3Dã¬ã³ããªã³ã°ã§ã¯ãã¹ãã³ã·ã«ãããã¡ãŒã¯ãæç»å¯èœãªå Žæãšæç»ã§ããªãå Žæã瀺ã2Dç»é¢ãµã€ãºã®ãµãŒãã§ã¹ã§ãã ãã£ã«ã¿ãŒã®ããã«èŠããŸãã ã¹ãã³ã·ã«ãããã¡ã®åãã¯ã»ã«ã¯ãããªã³ããã€ãŸããããã¯ãããæç»ããªãããŸãã¯ããªãããã€ãŸããèªç±ã«æç»ã§ããŸããã«ããããšãã§ããŸãã å®è£
ã«ãã£ãŠã¯ãå€ãéã«ãªãå ŽåããããŸãããã³ãŒãã§ã¯ãtrueããšããå€ã䜿çšããŠããããžãŒãæç»ããªããç¶æ
ã瀺ããŸãã
ããã°ã©ã
ãã¹ãã³ã·ã«ãããã¡ãèªã¿åãå Žåãæç»ããåã«ãã¹ãã³ã·ã«ãããã¡ããã¹ãŠã®äœçœ®ã§ãªã³ã«ãªã£ãŠãããã©ããããã§ãã¯ããŸãã ãã®å Žåãæ¢åã®ãã¯ã»ã«ã®äžã«ãã¯ã»ã«ãã¬ã³ããªã³ã°ããŸããã
ããã°ã©ã ã
ãã¹ãã³ã·ã«ãããã¡ã«æžã蟌ãããšããããã¯ãç»é¢äžã®ç¹å®ã®äœçœ®ã«äœããã¬ã³ããªã³ã°ãããšãã«ãã¹ãã³ã·ã«ãããã¡ã«æžã蟌ã¿ããã®äœçœ®ããã§ã«ååŸãããŠãããåæç»ãã¹ãã§ã¯ãªãããšã瀺ããŸãã
ã ãããããã§ç§ãã¡ãããããšã§ãã å£ãã¬ã³ããªã³ã°ãã
åã« ãH-Bufãèšç®ãã
åŸ ããšã³ãã£ãã£ãæç»ããŸãã å®å
šãªã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ã¹ãã³ã·ã«ãããã¡ãã¯ãªãŒãã³ã°ããŸãã
- H-Bufãèšç®ããŸãã
- ãšã³ãã£ãã£ãåé¢ããèé¢ã«ã¬ã³ããªã³ã°ããŸãïŒèªã¿åã/æžã蟌ã¿ã¹ãã³ã·ã«ãH-Bufã®æ·±åºŠãã¹ãïŒã
- H-BufïŒèªã¿åãã¹ãã³ã·ã«ïŒã䜿çšããŠå£ãã¬ã³ããªã³ã°ããŸãã
åãšã³ãã£ãã£ã®åãã¯ã»ã«ãã¬ã³ããªã³ã°ãããšããã¹ãã³ã·ã«ãããã¡ãŒã«æžã蟌ã¿ããã®äžã«ã¬ã³ããªã³ã°ãããä»ã®ãã¹ãŠãçŠæ¢ããŸãã ãã®ãã
ãåããåŸããžé çªã«ã¬ã³ããªã³ã°ããå¿
èŠããããŸãã ããã¯ã
æç»ãã
ãã¹ãŠãæçµçãªãã®ã§ãã
ããšãæå³ã
ãŸã ã ããã¯åæç»ãè¡ããªãããšãæå³ããç»é¢ã«æç»ããããã¯ã»ã«ãç¡é§ã«ããããšã¯ãããŸããã
ãšã³ãã£ãã£ãã¬ã³ããªã³ã°ãããšããç»é¢ã¹ããŒã¹ã®æ·±ããç¥ãããã®Xäœçœ®ã®å£ã®æ·±ããç¥ã£ãŠããŸãïŒH-Bufã®ãããã§ãïŒïŒããããã£ãŠããã®åã®æ·±ãããã¹ãã§ããŸãã ããã¯ãïŒã¬ã³ããªã³ã°ã®ãã®æ®µéã§ã¯å£ããªããŠãïŒïŒå£ã®åŸãã«é ããããšã³ãã£ãã£ã®éšåãã¬ã³ããªã³ã°ããããšãæ£ããæåŠããããšãæå³ããŸãã ããã§ãã1ã€ã®äœåãªãã¯ã»ã«ãè²»ããå¿
èŠã¯ãããŸããã 圌ãã¯ç§ãã¡ã«ãšã£ãŠéåžžã«é«äŸ¡ã§ãã
次ã«ã4ã€ã®ãã«ããŒããéãªã£ãŠããã·ãŒã³ãšãã¬ã³ããªã³ã°ãããé åºã®äŸã瀺ããŸãã æåã«åŽæ°ŽïŒçªå·1ãæãè¿ãïŒãæ¬¡ã«æšïŒ2ïŒã次ã«ç·ã®ã¢ã³ã¹ã¿ãŒïŒ3ïŒããªã¬ã³ãžã®ã¢ã³ã¹ã¿ãŒïŒ4ãæãé ãïŒãæ¥ãŸãã
åºãšå€©äºã¯ã©ãã§ããïŒ
åºãšå€©äºã¯ããšã³ãã£ãã£ãšå£ãã¬ã³ããªã³ã°ããåŸã«æ®ãå¯äžã®ãã¯ã»ã«ã§ãããããããã»ã¹ã®æåŸã®æ®µéã§ã¬ã³ããªã³ã°ãããŸãã 倩äºã¯ãã¹ãŠã·ã³ãã«ã§ããå®å
šã«é»ã§ããããã®ãã¯ã»ã«ãå¡ãã€ã¶ããH-BufãèŠãŠãå£ã®å§ãŸããæ±ºå®ããŸãã ãã®äžã®åãã¯ã»ã«ã¯é»ã§ãïŒãã ããã¹ãã³ã·ã«ãããã¡ãŒã¯ãã§ãã¯ãããŸãïŒã ã§ãã
ç
§æå¹æãé©çšããå¿
èŠããããããåºã¯ããè€éã«ãªããŸããåºãããã¬ãŒã€ãŒããé ãéšåãããæãããå¿
èŠããããŸãã
ããããç
§æãèšç®ããã«ã¯ãåºã®åãã¯ã»ã«ã®æ·±ããç¥ãå¿
èŠããããŸãã ãã¯ã»ã«ããšã«å®çŸ©ããã®ã¯é©ãã»ã©ç°¡åã§ãããªããªããäžç空éã®åº§æšã決å®ããããã«ç»é¢ç©ºéã®åº§æšããéã®é åºã§éå§ãããã¬ãŒã€ãŒããããããŸã§ã®è·é¢ã決å®ããããã§ãã ããã«ãæé ãéåžžã«ç°¡åã«ãªãããã«ããã¹ãŠãæåã§äºåèšç®ãããããã®ããžãã¯ãã³ããŒãå
¥åã§ããŸãã
function _S3FlatFact(x,y) local z=3000/(y-68) return _S3LightF(x,z) end
åºäžã®ãã¯ã»ã«ã®æå®ãããxãy座æšã®å Žåãåºäžã®å¯Ÿå¿ããZ座æšã¯3000 /ïŒy-68ïŒã®ã¿ã§ãã çç±ã¯ããããŸããããããã¯çŽã®ã³ã³ãã¥ãŒãã£ã³ã°ããèµ·ãã£ãã®ã§ãã ãããŠã
_S3LightFã§ããã䜿çšããŠãåºã®è²ã®èª¿æŽã«å¯Ÿå¿ããããã®ãã€ã³ãã«åœããç
§æã®éãèšç®ããŸãã
ããããããã¢ç
§æãã¬ããã®å€èгã§ãã ãã¬ãŒã€ãŒããé¢ãããšåŸã
ã«æããªãããšã«æ³šæããŠãã ããã
远å ã®ç¹å
æº
ããšãã°ããã¬ã€ã€ãŒãç«ã®çãæããŠççºããå Žåãªã©ãç
§æå¹æã®ããã®äžæçãªç¹å
æºã®ãµããŒããæäŸããŸãã
åçã¯åãã§ãïŒæç»ãããç¹ããäºæ¬¡å
æºïŒççºïŒãŸã§ã®ç»é¢ç©ºéã®è·é¢ãèšç®ãããã®å¹æãèæ
®ããŸãã
ãã®ãšãã§ã¯ãã¯ãã³ã¹ããããããä¿¡é Œæ§ãé«ããªããããé£ç¶ç
§æïŒå£ã®ããŒããªã©ïŒã«ã¯äœ¿çšããªãããšã«æ³šæããŠãã ããã ç»é¢ã¹ããŒã¹ã§èšç®ããããããã«ã¡ã©ã®å転ãšåãã¯å®éã«ã¯èæ
®ãããããœãŒã¹ããã¬ãŒã€ãŒã«è¿ããããšäžå¿«ãªæ©èœãšãŒãã«ããé€ç®ãè¡ãããŸãã
ã«ã©ãŒå€èª¿ãšãã£ã¶ãªã³ã°
TIC-80ã¯16è²ã®ã¿ã§åäœããŸããããã¯ã»ã«ãæãããããæããããããŠç
§æå¹æãäœæããã«ã¯ã©ãããã°ããã§ããïŒ
ç§ã¯æ¬¡ã®ææ³ã䜿çšããŸãããæãããæãããŸã§ã4ã€ã®ç°ãªãè²åããæã€3ã€ã®ç°ãªããããŒã³ããäœæããŸããã ãããã®ããŒã³ã¯ãããããã®4ã€ã®æ¿æ·¡ã®1ã€ãéžæããããšã§å€èª¿ã§ããããã«æãæãè²ãšããŠé»ïŒè²0ïŒãéžæã§ããŸãã ãã®çµæãã°ã¬ãŒãã°ãªãŒã³ããã©ãŠã³ã®3ã€ã®ãç·åœ¢å€åããåŸãããŸãã
clrM={
ãããã¯åçŽãªé
åãšããŠå®çŸ©ãããŠãããããäžå®éã®ç
§æã®è²ã調æŽããå¿
èŠãããå Žåã¯ãè²ãèŠã€ããŠãåãç·åœ¢å€åã®ä»ã®è²ãéžæããå¿
èŠããããŸãã
äžéè²ã¯ã©ãã§ããïŒ
圌ãã®ããã«ãå€ãã°ã©ãã£ãã¯æ©åšã§äœ¿çšãããŠããæŠç¥ã
ãã£ã¶ãªã³ã°ãé©çšããŸããã äžéè²ã®1ã€ã®ãã¯ã»ã«ã䜿çšããããšã¯ã§ããªãããããã¯ã»ã«ã®äžéšã«1ã€ã®è²ã䜿çšããä»ã®éšåã«ç°ãªãè²ã䜿çšãããã¿ãŒã³ãæç»ããŸãã ãã®çµæãç®ã¯ããããäžéè²ãšããŠèªèããŸãã
ããŒãã£ã¯ã«ãšãã§ã¯ã
ã¢ã³ã¹ã¿ãŒã殺ããããªããžã§ã¯ããç Žå£ããããããšãã«ãã¬ã€ã€ãŒã«çŽ æŽããããã£ãŒãããã¯ãäžããããã«ãåçŽãªããŒãã£ã¯ã«ãšãã§ã¯ãã䜿çšããŸãã
ãããã¯ãã¯ãŒã«ã空éã§ã·ãã¥ã¬ãŒããããã¬ã³ããªã³ã°æ®µéã§ç»é¢ç©ºéã«å€æãããå°ããªé·æ¹åœ¢ã§ãã é床äžã®çç±ããããããã¯åãåããããã¹ãã³ã·ã«ãããã¡ã§ã¯èæ
®ããããä»ã®ãã¹ãŠã®äžã«åçŽã«æç»ãããŸãïŒãäœåãªãã¯ã»ã«ãç¡é§ã«ããªãããšããååããã®ããããªéžè±ïŒã 幞ããªããšã«ãã€ã³ã¿ãŒã¬ãŒã¹ã¬ã³ããªã³ã°ã¯ãé·æ¹åœ¢ã§ãããšããäºå®ãé ããŠããŸãããããã¯é«éã§ç§»åããåãã¬ãŒã ãç°ãªãäœçœ®ã«ã¬ã³ããªã³ã°ãããããããŒãã«ã€ã³ã¿ãŒã¬ãŒã¹ãããããããªãŒã¬ããã¯ãã«èŠããŸãã
ãããã«
ãã®èšäºã§ã¯ãFPS80ã®ã¬ã³ããªã³ã°ããã»ã¹ã«ã€ããŠç°¡åã«èª¬æããŸããã ç§ã¯3Dãšã³ãžã³ããŒãããäœæããçµéšããªãã£ãã®ã§ãå€ãã®ããšãæ¹åã§ãããšç¢ºä¿¡ããŠãããç§ã®èª¬æã¯å€§éšåãééã£ãŠããŸãã ãšã©ãŒãèŠã€ãããç§ã«é£çµ¡ããŠãã ããïŒ
Twitterã§ç§ã«æžãããšãã§ããŸãïŒã
ç¬èªã®3Dã¬ã³ããªã³ã°ããžãã¯ã®éçºã¯ãéåžžã«è峿·±ãæçãªãã®ã§ããããšãããããŸããã ç¹ã«é¢çœãã®ã¯ãã¢ã«ãŽãªãºã ã®é床ãèœãšãå¿
èŠãããããšã§ãã ããã«ããã90幎代ã«3Dãšã³ãžã³ãã©ã®ããã«äœæããããã«ã€ããŠïŒå°ããªïŒã¢ã€ãã¢ãåŸãããŸããïŒ
FPS80ãœãŒã¹ã³ãŒããšã¬ã³ããªã³ã°ãšã³ãžã³ã¯
githubã§å
¥æã§ããŸãã ãããžã§ã¯ãã§èªç±ã«äœ¿çšããŠãã ããïŒ
ãæ³šæ ãã¬ã€æ¹æ³ïŒ TIC-80 ä»®æ³ã³ã³ãœãŒã«ãã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããŸã ã TIC-80ãèµ·åãã surf
ã³ãã³ããå
¥åã ãŸãã [tic.computer/play]
ãéžæããZãæŒããŠéžæããŸãã ãªã¹ãã§ FPS80
ã FPS80
ã ZãæŒããŠéå§ããŸãã TIC-80 Webãµã€ãã§ ã²ãŒã ã ãã¬ã€ããããšãã§ã ãŸã ïŒãã ããããã§é³ãéåããŸãïŒã