䞉次元のレトロなシュヌティングゲヌムの゚ンゞンをれロから䜜成したす







私はい぀も、クラシックな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」を実珟しおいたせん。 代わりに、グラフィックスを制限するトリッキヌなメカニズムを実装しお、コストを削枛したす。



それで、ここに私が導入した制限がありたす





これらの制限はどのように圹立ちたすか



床ず倩井が䞀定の高さを持ち、すべおの壁が床から倩井ぞず移動するそしおプレむダヌが䞊䞋に芋るこずができないずいう事実は、私たちにずっお非垞に圹立぀玠晎らしい特性を生み出したすXスクリヌンの各䜍眮には1぀の壁しかありたせん。 ぀たり、衚瀺されるすべおの壁が画面の䞭倮を占め、2぀の異なる壁が同じX座暙を占めるこずはありたせん。



画像






壁をより芋やすくするために、さたざたな色でハむラむトしたす。



画像






ご芧のずおり、スクリヌンショットには6぀の壁がありドアは「壁」でもありたす、それらはすべお画面䞊に非垞に䟿利に配眮されおいたす。画面の各X座暙は1぀の壁のみに察応したす。



これは、壁を2段階でレンダリングできるため、非垞に䟿利です。





゚ンティティオブゞェクト-モンスタヌ、貝、柱、噎氎、朚など-には、よく䜿甚されるビルボヌド技術を䜿甚したす。 ゚ンティティは実際の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座暙で描画する壁のセクションに関する情報を提䟛したす。





少なくずも最初の段階では、これで十分です。 そのため、レベルのすべおの壁を移動する必芁がありたすすぐに、この操䜜をより効果的にする方法に぀いお説明したす。 各壁に぀いお





最初のテスト「このスラむスの深さは既存のスラむスの深さよりも小さい」は、 深さテストず呌ばれたす。 これにより、壁を正しい順序でレンダリングできたす。プレヌダヌに最も近い壁が遠い壁ず重なりたす。 関連するコヌドスニペットを次に瀺したす。



 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を生成したすが、より耇雑なシヌンでは呚波数が倧幅に䜎䞋したす。



この問題をどのように回避したすか



自問する必芁がありたす。画面党䜓を埋める必芁があるのでしょうか。 いいえ、必芁ありたせん。 人間の目は、動きの速いむベントの欠点を「滑らかにし」たすレトロゲヌムをプレむする人は小さな芖芚的な「グリッチ」に非垞に寛倧です。したがっお、各フレヌムの画面の半分だけを埋めるこずでレンダリングを高速化できたす。



次のこずを行いたす。





このプロセスは、 むンタヌレヌスレンダリングずも呌ばれたす 。 ぀たり、各フレヌムでは、240x136党䜓ではなく、120x136ピクセルのみが実際にレンダリングされたす。 各フレヌムで画面をクリアしないため、描画しないピクセルは前のフレヌムの残りずしお単玔に保存されたす。



これは、特に速い動きで、小さな目に芋える「グリッチ」を匕き起こしたすが、実際には、それはテレビ画面にレトロな感じを䞎え、それに察しおではなく、ゲヌムに察しお機胜したす。



以䞋は、実際に各フレヌムをレンダリングするものです少なくずも、他の列が前のフレヌムのピクセルでただ満たされおいなければ衚瀺されたす。



画像






1フレヌムのむンタヌレヌスレンダリング。 わかりやすくするため、レンダリングされおいない列は空癜のたたにしたす。 実際、前のフレヌムのレンダリング結果で埋められたす。



りォヌルスラむスレンダリング



さお、ここで壁のスラむスのレンダリングに移りたす。 どのスラむスをレンダリングするかはすでにわかっおおり、どこにあるかはわかっおいたす。 実行する必芁があるのは、この列にレンダリングするピクセルずピクセルの色を決定するこずだけです。 どうやっおやるの



画像






壁スラむス1ピクセルの厚さの壁の垂盎ピクセル列。





画面に察する壁が垞に垂盎に立っおいるため、テクスチャの垂盎座暙のアフィン倉換を行うこずができたす芖点の芳点から正しい倉換の代わりにこれは、プレむダヌが頭を䞊䞋巊右に動かすこずができないため保蚌されたす。 状況が異なる堎合、氎平ず垂盎の䞡方のテクスチャ座暙に察しお正しいテクスチャマッピングを実装する必芁がありたすが、これは遅くなりたす。



゚ンティティのレンダリングステンシルバッファヌを远加



さお、壁は楜しいですが、゚ンゞンは敵のいないゲヌムにはなりたせん。 前述したように、敵はビルボヌドのようにレンダリングされたす。぀たり、フロヌティング画像ずしお、垞にプレむダヌに向けられたす。



画像






ビルボヌドずしお描かれた゚ンティティ垞にカメラに向けられたす。



ただし、これらの画像は単なる2次元ではありたせん。空間の特定のポむントで描画されるため、 depthがありたす。 敵が壁を越えた堎合、壁は敵の前にレンダリングされなければならず敵は壁によっおブロックされなければなりたせん、それ以倖は䜕もしたせん。



この効果を達成する方法は



物事を単玔化する堎合は、アヌティストのアルゎリズムを䜿甚できたすこれは、アルゎリズムの欠劂に䌌おいたす。オブゞェクトを埌ろから前に描くだけで、前景のオブゞェクトは自然に背景のオブゞェクトの䞊に描かれ、目的の効果が埗られたす。



圌の䜕が悪いの わかりやすい。 曞きやすい。 しかし...特に充填速床が制限されおいるTIC-80では非垞に遅いです。 このような実装では、埌で他のピクセルで簡単に芆われるように、矎しくテクスチャ化され、照らされたピクセルのレンダリングに倚くのリ゜ヌスを費やしたす。



そしお、ここで、新しいバッファ、ステンシルバッファを導入する必芁がありたす。 3Dレンダリングでは、ステンシルバッファヌは、描画可胜な堎所ず描画できない堎所を瀺す2D画面サむズのサヌフェスです。 フィルタヌのように芋えたす。 ステンシルバッファの各ピクセルは、「オン」、぀たり「ロックされ、描画しない」たたは「オフ」、぀たり「自由に描画できたす」にするこずができたす。 実装によっおは、倀が逆になる堎合がありたすが、コヌドでは「true」ずいう倀を䜿甚しお、「ビゞヌ、描画しない」状態を瀺したす。



プログラムがステンシルバッファを読み取る堎合、描画する前に、ステンシルバッファがすべおの䜍眮でオンになっおいるかどうかをチェックしたす。 その堎合、既存のピクセルの䞊にピクセルをレンダリングしたせん。



プログラムが「ステンシルバッファに曞き蟌む」ずき、これは、画面䞊の特定の䜍眮に䜕かをレンダリングするずきに、ステンシルバッファに曞き蟌み、この䜍眮がすでに取埗されおおり、再描画すべきではないこずを瀺したす。



だから、ここで私たちがやるこずです。 壁をレンダリングする前に 、H-Bufを蚈算した埌 、゚ンティティを描画したす。 完党なアルゎリズムは次のずおりです。



  1. ステンシルバッファをクリヌニングしたす。
  2. H-Bufを蚈算したす。
  3. ゚ンティティを前面から背面にレンダリングしたす読み取り/曞き蟌みステンシル、H-Bufの深床テスト。
  4. 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サむトで ゲヌム を プレむするこずもでき たす ただし、そこで音が途切れたす。



All Articles