64kB演示文稿,它们是如何工作的?

16

我曾经看到一些程序展示了令人惊叹的高度详细的3D场景和配乐,但令我震惊的是,它们都小于64kB!这些程序是如何运作的呢?

在此输入图像描述


7
@Cody Gray 这里没有其他文件。所有的东西都在一个可执行文件中。请看CodeInChaos的答案。 - ba__friend
5
@Cody 我不这么认为。通常对于大小受限的演示版本,可执行文件和所有资源的大小都需要低于限制。在可以使用哪些运行时库方面有一些差异,但通常这些库已经是操作系统的一部分了。 - CodesInChaos
3
如果添加的资源超过64k,那么它就不再是一个64k演示了。而且64k已经是较大的大小限制之一。4-8k的限制也很常见。 - CodesInChaos
5
题目说的是“64k演示”,因此不仅仅涉及主程序很小的程序。根据维基百科对“演示(计算机编程)”的定义,由于许多演示是竞赛入选作品,组织者会制定确切的规则。一般有一些受欢迎的限制,比如4kB和64kB。 - CodesInChaos
2
也许“64k demo”是一个众所周知的概念,但我希望能看到一些与平台和语言相关的标签。 - H H
显示剩余4条评论
3个回答

19
他们通过程序生成内容。也就是说,他们不添加3D模型、位图、样本基础音频文件等,而是从代码或某些低细节表示中生成那些内容。
使用自相似(分形)并通过组合简单构建块和公式来构建复杂数据通常是紧凑表示的关键。
音频可以以类似 MIDI 的格式存储,其中存储了不同的音符。
纹理是通过组合滤波器、分形等生成的,可以搜索“Perlin 噪声”获取简单示例。此处提供了一个链接: 展示如何从 Perlin 噪声创建非常不同的纹理 3D 模型可能具有一些几何描述,使用公式,并使用类似于过程纹理的技术添加细节。
大多数情况下会使用一些运行时解包程序。也就是说,普通可执行文件的大小超过了限制,并使用 exe 打包器进行了压缩。演示通常不使用 UPX,而是使用专门的打包器,其具有非常小的加载器/解包器,甚至可能会泄露内存(如果您可以减少一些字节,谁在乎内存泄漏呢)。

2
可能不是什么? - bjb568
@bjb568 不要问我2011年写那个的时候在想什么。 - CodesInChaos
1
我认为这是打开这个世界窗口的好链接:http://llg.cubic.org/docs/farbrauschDemos/,连同pouet.net。 - v.oddou

4

从前,它们是用汇编语言编写的COM文件。甚至还有16kb的演示程序。

我非常喜欢这些演示程序,这就是为什么汇编语言是我学习的第一种编程语言。我从未成功地创建过真正的演示程序,但我能够创建一个清除我的硬盘的病毒。我没有源代码;)


2
它们是:
  • 没有无用的外部库的代码(你真的应该知道你需要什么才能做到这一点),
  • 着色器编译器,压缩器等。
  • 功能性的3D图形和2D纹理制造商(但是确定性和恒定,但与许多参数相关),
  • 程序化音频制造商(每次都相同)。

代码示例可以在此处找到:

http://www.displayhack.org/2012/the-great-demoscene-sourcecode-giveaway/

“别傻了,伙计们——直接用谷歌搜索!”

1
好的,关于当前日期PC制作的第一点完全错误。它们包括完整的OpenGL或DirectX库以及其他所需的库。只需参考您的第二个观点:着色器编译器从哪里来? - St0fF
嗨,感谢您的评论。我猜您想要严格正确。是的,抱歉。不是所有的库都是有用的,也不是必需的。另一个例子,许多人会将一整个包(例如SFML)添加到项目中,即使他们并不需要其中的某些部分。而且,您能否广泛解释一下您的问题?PS:我看到了npl.de,非常感激! :) - Volodia
哦,我的问题只是修辞上的。着色器需要在当前硬件上编译,这是设备驱动程序的工作(至少在Windows中是这样)。因此,还有另一个大块外来代码被使用。现在已经不同于千禧年时期4k的情况了。可以查看一些当时t$发布的狂热番茄。 - St0fF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接