ZX Spectrum Raytracer(BASIC 版本)

ZX Spectrum Raytracer(BASIC 版本)

源节点: 3085593

[Gabriel Gambetta] 作为 Tiny Raytracer 的作者,对光线追踪器有一些了解,Tiny Raytracer 是一个仅用 912 字节 JavaScript 编写的光线追踪器。作为一个长期 同伴 英国设计的 ZX Spectrum 的受害者,这两种爱情是否可以合并? 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 尺寸-中” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt 宽度=”400″ 高度=”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 种原色的光线追踪

故事从[加百列]开始 从头开始计算机图形学 (CGFS) 光线追踪器算法 以及移植到 ZX Spectrum 非常有限的 BASIC 方言的现有代码库,使用 VSCode 进行编辑, 巴斯夫2TAP 生成磁带映像文件(本质上是音轨)并执行 FUSE。对工具链进行排序后,[Gabriel] 添加了足够的代码来处理球体的光线相交方程,并将三球体场景渲染为 32×22 像素彩色图像,仅花费了 15 分钟的运行时间。其他患者会记得光谱有一个 32×22 块属性数组(或颜色数组),具有前景和背景像素的两个颜色值。每个属性块包含 8×8 像素,每个像素都可以是前景(打开)或背景(关闭)。下一阶段是扩展代码以处理像素和块,只需将光线跟踪扩展到完整的 256 ×176 分辨率,并且对于每个块只需确定两种最常见的颜色,然后对整个块运行这些颜色。它以一种非常频谱式的“属性冲突”方式发挥作用。

但现在的运行时间是17个小时!接下来,进行一些性能调整,使用相当多的光谱 BASIC 技巧和一些图形近似,例如为块的每个角像素投射光线,如果它们相同,则将所有剩余 60 个像素着色为相同并继续。这项工作将运行时间缩短到了两个小时。

接下来,[Gabriel] 勇敢地抛弃了平面照明模型,对单个光源进行建模,并使用一个简单的方法,拿出单色光谱世界中唯一剩下的技巧,即每个块的抖动强度值 8×8 有序抖动模式,考虑到所有因素,这看起来并不算太糟糕。在完成的路上快速停下来, 添加阴影 而且运行时间又回到了17个小时,但还是值得的。显然,这是针对单一场景类型进行优化的,其中球体占主导地位,但原理已经存在,而立方体只需要几行代码即可。有接受者吗?

光线追踪是那些有趣但复杂的任务之一,人们喜欢将其嵌入到不合适的硬件中, 就像这个 TI-84Plus CE 图形计算器,如果这有点难以访问,这里有同样疯狂的东西 在普通旧式 Excel 中运行.

时间戳记:

更多来自 一日游