看到下面这只鸭子没?这不是一般的鸭子!!!

你现在需要做的:

1、保存图片至本地硬盘;

2、把图片扩展名由.jpg改成.rar,没错,这是一个压缩文件;

3、解压,查看里边的3个exe文件。

这是3段神奇的3D动画,虽然每段只有64K大小,内容却极为丰富。尤其是prophecy《彗星撞地球》,竟然包含了近30分钟的不重复3D影片和令人震撼的音效!第一次看见64K动画时,觉得很神奇。这种动画往往包含了一些复杂的几何造型和绚丽的纹理,然后还有着节奏强劲的背景音乐。这一大堆东西无论如何也不像是一个仅仅64K的执行文件所能容下的,按照普通的理解,单是长达几分钟甚至几十分钟的背景音乐文件也需要以M为单位的存储空间,更别说那么多的模型和纹理图像了。后来当我花了很长一段时间学习MIDI音乐制作和3D图形学后,64K 动画也就不显得那么神奇了——其实就只是一个实时图形演算程序而已。如果我们掌握了一些实时纹理及模型生成的方法,写出一个与64K Intro 类似的Demo也不是件难事,当然,由于一些神秘的技术技巧我们不可能完全得知,所以要达到像国外的SceneDemo专业团队的水平那也是相当有难度的。有兴趣想做做类64K 动画的伙计们可以看看这本书:《Texturing and Modeling - A Procedural Approach》——七百多页的大块头,里面详细的介绍了各种过程纹理和造型技术。

一个MIDI音乐多大?5分钟的,不过数十KB而已,包含了128种音色,如果每种音色都用最高的采样率来计算波表大小而且不算压缩,也可以说一个MIDI音乐就包含了数十GB的声音数据,而其体积仅仅只有数十KB。问题是MIDI你觉得神秘么?一点都不神秘。这些DEMO,实际上可以看得出的确并不消耗多少资源——3D程序的重头戏,是纹理,而不是模型,储存一个顶点只需要4个字节,而一个动画也许只有几千个顶点,甚至更少。至于声音,这些DEMO里只有寥寥几种音色而已,用波表的方式存储,声音消耗的资源,若干KB即可。这些程序只是定义了一些数学网格,和这些网格顶点的运行方式,一切都是纯数学的,可以用函数描述。用数学描述我们整个宇宙的运行,也只需要几十个方程,加起来连10KB都不到,更何况描述这几个简单的图形呢?

那为什么其他的3D游戏那么大?

两个方面的原因。一是因为3D程序吃空间的重头戏是纹理。游戏为了做到更好的效果,用了非常复杂非常恐怖的贴图和特效计算,例如Crysis VeryHigh模式,用到的贴图都是4096x4096尺寸,32位色的。如果不压缩,一张图就是64MB的空间,而任何一个场景,都会用到数十数百甚至上千张贴图,这些都是需要大量空间的。而诸如AF、AA这样的操作,也会消耗大量的纹理内存。第二是对于像素的处理。这些DEMO虽然看起来还不错,但实际上处理非常粗糙,基本上就是最简单的贴图,外加简单的光照,这些都不需要程序自己处理,代码上不过是几个函数调用而已。但游戏不同,为了得到复杂的效果,最顶级的游戏都是用程序来计算每一个像素的颜色的,先贴上很多层图(现代游戏至少3层),然后再根据很多复杂的算法进行计算。继续用Crysis做例子,要计算出屏幕上的一个像素,平均得执行2000条指令——这个是那些DEMO无法相提并论的。

不过这些DEMO还是有启发意义的,就是很多时候人们并不需要非常逼真的效果,如何用最少的资源换取看起来最好的效果,这是这些DEMO值得借鉴的地方。

一只鸭子带来的震撼 - Aland·Sun相关推荐

  1. c语言指数爆炸月球,指数爆炸带来的震撼

    1. 有个乞丐与皇帝下中国象棋,有个条件,如果他输了,愿意把脑袋拿掉,但是如果乞丐赢了的话,只要求皇上给一些米. 皇上说,''想要多少米?'' 不知您是否愿意?你这个棋盘,就这么多方格,第1个里面放1 ...

  2. Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]...

    一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口                            } ...

  3. 三个点在同一个半圆的概率_求解四只鸭子在同一半圆池塘的概率

    问题模型 有四只鸭子,随机分布在圆形的池塘中,请问四只鸭子同时处于同一个半圆的概率有多大? 统计模拟 使用计算机进行大量的随机实验,统计推断出未知变量的概率.我们将进行100万次独立采样试验,每次试验 ...

  4. 一个人赶着鸭子去每个村庄卖,每经过一个 村子卖去所赶鸭子的一半又一只。 这样他经过了 七个村子后还剩 两只鸭子,问问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

    代码如下: #include <stdio.h>int main(int argc, const char *argv[]) {int sum = 2;int i = 0;int j = ...

  5. 4只鸭子在同一个圆圈内游泳,问:4只鸭子出现在同一个半圆内的概率是多少?Python解答

    看到这个问题有些晚了,不过也挺感兴趣,索性花了5分钟写了个Python的.发现已经有许多其它博主使用了编程来进行解答,我看了个Java的,思路也是大同小异.在此之前我已在百度知道上进行了回答 问题: ...

  6. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB

    练习题4.圆中四只鸭子在同一个半圆的概率 参考思路: 蒙特咔罗法 (进行N次试验,每次试验生成4个随机点,统计四点在同一个半圆的个数)相关知识点: input.if...else.for循环或whil ...

  7. 4只鸭子在同一个圆圈内游泳,问:4只鸭子出现在同一个半圆内的概率是多少?Python模拟

    这是微博上看到的问题,c站上也有很多解答,我看了一圈发现计算都太复杂,我这里有个想法,可以简化计算. 将4只鸭子在一个半圆的问题等价为4只鸭子随机分布在周长上,一个半圆就是一个半周长,(根据圆的角度投 ...

  8. 四只鸭子在一个水池中,分别随机出现在圆圈中任意一点,四只鸭子出现在同一个半圆的概率是多少?

    上个月在网上看到一道数学题,于是写了个算法进行计算,别人和我说这叫蒙特卡罗. 题目如下: 我写的代码如下: package DuckCircle;import java.util.Random;pub ...

  9. 一道数学题引发的惨案!4只小鸭子在一个圆形的大水池中,分别随机的出现圆圈中任意一点。4只鸭子在同一半圆内的概率是多少?

    答案在文章结尾,不感兴趣的可以直接看答案 也就是昨天在渣男开车群中惊现一张照片.4只鸭子! 然后一群渣男开始了激烈的讨论,有说1/8的 有说3/4的 有说1/3的-反正说什么的都有 唉你说都是男的好好 ...

最新文章

  1. 那xxx.class.getName()為什麼能這樣寫?? 看了半天都快搞不清楚到底在程式中的example到底是class ? object ? 還是instance了
  2. 怎样解决样本不平衡问题
  3. SAP之成本中心类型与功能范围
  4. windows常用进程
  5. 提示以下的错误信息:“未能在设计视图中打开, 块中,以不同方式将值括起来 ”...
  6. iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通
  7. mysql sphinx 中文搜索_sphinx+mysql+mmseg 实现中文全站搜索 安装配置文档
  8. (计算机组成原理)第三章存储系统-第四节:主存储器和CPU的连接
  9. ORA-12638处理
  10. 【新书推荐】【2020】卫星通信(第三版)
  11. STC8单片机驱动ADS1256多路AD采集
  12. 曾经的理发店小弟,现在是阿里P10技术大牛
  13. NDT Matching 算法学习
  14. ICM TSCC视频格式的播放
  15. electron中引入iohook来监听系统级鼠标键盘事件
  16. Python爬虫必备知识点--整理核心基础
  17. 【MTK官方工具】最好用的MTK官方工具
  18. 节日献礼:Flutter图片库重磅开源!
  19. SPL 工业智能:识别指定工况
  20. diary在matlab,在MATLAB中,命令“diary on/diary off”表示()

热门文章

  1. linux 调度类,了解RT调度类linux的dequeue_rt_stack()
  2. 如何利用python进行在线语音识别
  3. 【bzoj2006】【NOI2010】【超级钢琴】
  4. Java面试100问
  5. PC构件行业发展概况及竞争格局、发展趋势
  6. linux-mptcp调度算法,基于RSFSA的MPTCP数据调度算法的研究
  7. Openzwave库中对Zwave产品配置文件的使用
  8. 2021年质量员-市政方向-通用基础(质量员)免费试题及质量员-市政方向-通用基础(质量员)考试技巧
  9. java8怎么通过LocalDate获取上个月的时间
  10. l36h android 4.4,推送在即?索尼L36h升级安卓4.4截屏流出