Show HN: 在终端中旋转的环面(使用 Kitty 图形协议)

Hacker News Top 工具

摘要

一位开发者分享了使用 Kitty 图形协议在终端中渲染的旋转环面,并解释了 base64 编码和协议细节。

Hi HN,<p>今年夏天我将在斯坦福大学学习计算机图形学,想表达一些我脑海中非常简单的概念。所以我用 C 语言写了一个旋转环面。从编写一个能在 Blender 中工作的光线追踪器,到没有任何依赖的纯 C 语言,感觉非常轻松。我还想顺便试试 Kitty Graphics Protocol,在终端中渲染图像感觉太酷了。<p>欢迎评论和建议。
查看原文
查看缓存全文

缓存时间: 2026/08/08 14:18

# torus v0.5 Source: https://andreadimatteo.com/torus-v0-5.html ·2026\-08\-01 --- 嗨,我是 Andrea。在稍微玩了一下这个暂时还没有被遗忘的 torus 程序之后,我决定用 Kitty Graphics Protocol (https://sw.kovidgoyal.net/kitty/graphics-protocol/) 来渲染它,我的终端 (https://ghostty.org/) 也支持这个协议。如果你一开始像我一样不仔细看,可能会以为就是发送用纯 ASCII 编码的原始像素数据。嗯,可没那么简单,嘿嘿。你必须发送 base64 编码的图像(RGB、RGBA、PNG)。对于那些不了解的人来说(包括我在阅读之前的我),这种编码的工作方式如下: - 取 3 个字节作为输入 - 将其拆分成每 6 位一组 - 给定 `i`,一个 6 位无符号整数,返回字符 `map\[i\]`,其中 `map` 是编码特有的映射表,对这四个 6 位无符号数中的每一个都这样做 - 如果输入不是 3 字节的整数倍,则根据需要填充 `=`(特殊字符) 如果你想了解更多,并且想用老式方式来做,就去看看 RFC (https://datatracker.ietf.org/doc/html/rfc4648#section-4) 吧。 对 RGB 数据来说,它的实现简单得令人意外,而且你还可以炫耀一下你知道 RFC 的全称是 Request For Comment。 一旦你有了 base64 编码的图像,就可以使用 kitty 图形协议,以最大 4096 字节的块来发送它。所有图形都遵循 `\_G;\\` 这种格式,翻译成 `printf\(\)` 也就是:`printf\("\\033\_G;\\033\\\\"\);`,其中 `<key-value map>` 是一个以 `;` 结尾的、用逗号分隔的键值字符串。这个映射表的一些基本信息有: - 在终端上显示:`a=T` ~必须指定,否则什么都不会显示 :)~ - 数据类型:`f=24/32/100` 分别对应 RGB、RGBA 和 PNG(必须指定) - 宽度:`s=%n`(必须指定) - 高度:`v=%n`(必须指定) - 压缩:`o=z`(可选) - 终端列数和行数:`c=%d,r=%d`(可选) - 更多(如果后面还有数据块):`m=%1` 现在,有了真实的图像渲染,我终于可以看到到底发生了什么。事实上,之前发生了一些非常奇怪的事情,比如 torus 被切成两半、光照不一致。视觉调试起来容易多了,还可以添加很酷的东西,比如颜色和第二个(不同颜色的)光源。 写 `Metal` 代码来在 Apple Silicon 上加速这一切会很有趣,可能学起来有意思,也可能纯粹是找罪受;或者也可以把它做成一个真正能加载 OBJ 网格的渲染引擎;又或者干脆永远忘记这个项目。 这就是目前的结果,很酷吧 :) ? 代码可以在下面的仓库里找到: (https://github.com/andimatteo/torus) torus > 帧率计数器让它看起来更专业,尽管它其实没用,因为它会休眠来避免帧率超过 33.33 (0.o) 冷知识:你知道品红色(蓝色 + 红色)并不是一种真实的颜色吗?它在可见光谱中并不真正存在,只是我们的大脑编造出来的 :)

相似文章

Ratty: A terminal emulator with inline 3D graphics

Lobsters Hottest

# Ratty — A GPU-rendered terminal emulator with inline 3D graphics 🐀🧀 Source: [https://ratty-term.org/](https://ratty-term.org/) © 2026 Ratty,[Orhun Parmaksız](https://github.com/orhun)

Show HN:一个ASCII 3D渲染引擎

Hacker News Top

GlyphCSS是一个JavaScript库,它使用ASCII字符在DOM中渲染带纹理的3D网格,支持多种3D格式,并与原生JS、React和Vue集成。

Tsplat – 在终端中运行高斯泼溅渲染

Hacker News Top

Tsplat 是一款基于 Rust 的命令行工具,仅使用 CPU 即可直接在终端中渲染 3D 高斯泼溅场景,甚至支持通过 SSH 运行。它支持 Unicode 半角块和图形协议,并具有导航和自动旋转控制。