ç§ã¯ãã€ããã¯ã©ã·ãã¯ãª90幎代ã®äžäººç§°ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã奜ãã§ããã
åœæãä»ã®æ¹æ³ããªãã£ãããã誰ããæåãã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 -- hbuf 1 ( Lua) local hbx=hbuf[x+1] local z=_S3Interp(w.slx,w.slz,w.srx,w.srz,x) if z>nclip and z<fclip then if hbx.z>z then -- . hbx.z,hbx.wall=z,w -- end end end
åå£ã«å¯ŸããŠãã®æäœãå®è¡ãããšã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] -- hbuf 1 local w=hb.wall if w then local z=_S3Interp(w.slx,w.slz,w.srx,w.srz,x) local u=_S3PerspTexU(w,x) _S3RendTexCol(w.tid,x,hb.ty,hb.by,u,z,nil,nil, nil,nil,nil,w.cmt) end end end
éåžžã«å¥åŠãªããªãã¯ã§ãã¬ãŒã ã¬ãŒãã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,2,3,15}, -- "" {7,6,5,4}, -- "" {8,9,10,11} },
ãããã¯åçŽãªé åãšããŠå®çŸ©ãããŠãããããäžå®éã®ç §æã®è²ã調æŽããå¿ èŠãããå Žåã¯ãè²ãèŠã€ããŠãåãç·åœ¢å€åã®ä»ã®è²ãéžæããå¿ èŠããããŸãã
äžéè²ã¯ã©ãã§ããïŒ
圌ãã®ããã«ãå€ãã°ã©ãã£ãã¯æ©åšã§äœ¿çšãããŠããæŠç¥ã ãã£ã¶ãªã³ã°ãé©çšããŸããã äžéè²ã®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ãµã€ã㧠ã²ãŒã ã ãã¬ã€ããããšãã§ã ãŸã ïŒãã ããããã§é³ãéåããŸãïŒã