14

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

在此处输入图像描述

4

3 回答 3

19

他们按程序生成内容。即,他们不添加 3d 模型、位图、基于样本的音频文件……而是从代码或一些低细节表示中生成。

使用自相似性(分形)并通过组合简单的构建块和公式来构建复杂的数据通常是紧凑表示的关键。

音频可以以某种类似 MIDI 的格式存储,其中存储了不同的音符。

纹理是结合过滤器、分形、......谷歌“Perlin noise”作为一个简单的例子生成的。展示如何从柏林噪声创建非常不同的纹理

3D 模型可能有一些使用公式的几何描述,并使用类似于程序纹理的技术添加细节。


并且大多数使用一些运行时解包器。即您的正常可执行文件大于限制,并使用 exe 打包程序进行压缩。演示通常不使用 UPX,但专门的打包程序具有非常小的加载器/解包器,甚至可能泄漏内存(如果你能保护几个字节,谁会关心内存泄漏)。

于 2011-05-21T11:25:40.337 回答
4

在过去,它们是用汇编语言编写的 COM。甚至还有 16kb 的演示。我非常喜欢这些演示,这就是为什么 Assembly 是我学习的第一门编程语言。我从来没有设法创建一个真正的演示,但我能够创建一个清除我硬盘的病毒。我没有源代码;)

于 2011-05-21T11:26:00.790 回答
2

他们是:

  • 没有无用(原文如此!)外部库的代码(你真的应该知道你需要做什么),
  • 着色器编译器、压缩器等。
  • 功能性 3d 图形和 2d 纹理制作器(但具有确定性和恒定性,但与许多参数相关),
  • 程序音频制作者(每次都一样)。

示例(代码示例!)可以在这里找到:

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

别傻了——用谷歌吧!!!

于 2014-12-26T00:44:09.893 回答