ZX Spectrum Raytracer (BASIC 版)

ZX Spectrum Raytracer (BASIC 版)

ソースノード: 3085593

[Gabriel Gambetta] は、わずか 912 バイトの JavaScript で書かれたレイトレーサーである Tiny Raytracer の作者なので、レイトレーサーについていくつかの知識を持っています。昔からとしては 仲間 英国が設計した ZX Spectrum の被害者、この 2 つの恋愛は融合できるでしょうか? Tiny Raytracer は ZX Spectrum に適合しますか? BASICで?答えは 私たちの最愛の種には多くの制限があるにもかかわらず、肯定的です.

<img decoding="async" data-attachment-id="661085" data-permalink="https://hackaday.com/2024/01/26/a-zx-spectrum-raytracer-in-basic/screenshot-from-2024-01-25-21-02-18/" data-orig-file="https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png" data-orig-size="940,648" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot from 2024-01-25 21-02-18" data-image-description="

https://gabrielgambetta.com/zx-raytracer.html

” data-image-caption data-medium-file=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” data-large-file =”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?w=800″ class=”wp-image-661085 size-中」 src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt width=”400″ height=”276″ srcset= https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png 940w、https://platoaistream.com/wp-content/uploads/ 2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=250,172 250w、https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer -in-basic-1.png?resize=400,276 400w、https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize= 800,551 800w” サイズ=”(最大幅: 400px) 100vw, 400px”>

15 原色のみを使用したレイ トレーシング

物語は【ガブリエル】から始まります。 Computer Graphics From Scratch (CGFS) レイトレーサー アルゴリズム 編集に VSCode を使用して、ZX Spectrum の非常に限定された BASIC 言語に移植された既存のコード ベース。 BAS2TAP テープ イメージ ファイル (基本的にはオーディオ トラック) を生成し、次のように実行します。 FUSE。ツールチェーンがソートされた後、[Gabriel] は球の光線交差方程式を処理するのに十分なコードを追加し、32 つの球のシーンを 22 × 15 ピクセルのカラー イメージにレンダリングします。実行時間はわずか 32 分です。苦しんでいる仲間なら、スペクトルには前景ピクセルと背景ピクセルの 22 つの色の値を持つ 8×8 のブロック属性配列 (またはカラー配列) があったことを覚えているでしょう。各属性ブロックには 256×176 ピクセルが含まれており、それぞれが前景 (オン) または背景 (オフ) になります。次の段階では、レイトレーシングを完全な XNUMX ピクセルに拡張するだけで、ブロックだけでなくピクセルも処理できるようにコードを拡張します。 ×XNUMX の解像度で、ブロックごとに最も一般的な XNUMX つの色を単純に決定し、ブロック全体でその色を使用して実行します。それは一種のスペクトル風の「属性衝突」のような形で機能します。

しかし、実行時間は 17 時間になりました。次に、かなりの数のスペクトル BASIC ハックを使用したパフォーマンスの微調整と、ブロックの各隅のピクセルに光線をキャストし、それらが同一の場合は残りの 60 ピクセルすべてを同じ色にして次に進むなどのいくつかのグラフィック近似を使用します。 。この取り組みにより、実行時間が XNUMX 時間に短縮されました。

次に、[Gabriel] は大胆にもフラット照明モデルを廃止し、単一の光源をモデル化し、モノクロ スペクトルの世界に唯一残っているトリック、つまり単純な関数を使用して各ブロックの強度値をディザリングするトリックを引き出します。 8×8の規則的ディザパターン、すべてを考慮すると、それほど悪くはないようです。完成までの途中でちょっと立ち寄って、 影を追加する 実行時間は 17 時間に戻りましたが、それだけの価値はあります。明らかに、これは単一のシーン タイプ、つまり球が主に使用されるシーン タイプに最適化されていますが、原則は存在しており、立方体はあと数行のコードで実現できます。参加者はいますか?

レイトレーシングは楽しいですが複雑なタスクの 1 つであり、人々は不適切なハードウェアに押し込むのが大好きです。 この TI-84Plus CE グラフ電卓のようなアクセスするのが少し難しい場合は、同様にクレイジーなものがここにあります 普通の古い Excel で実行する.

タイムスタンプ:

より多くの ハッカデイ