一只鸭子带来的震撼 - Aland·Sun
看到下面这只鸭子没?这不是一般的鸭子!!!
你现在需要做的:
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相关推荐
- c语言指数爆炸月球,指数爆炸带来的震撼
1. 有个乞丐与皇帝下中国象棋,有个条件,如果他输了,愿意把脑袋拿掉,但是如果乞丐赢了的话,只要求皇上给一些米. 皇上说,''想要多少米?'' 不知您是否愿意?你这个棋盘,就这么多方格,第1个里面放1 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]...
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口 } ...
- 三个点在同一个半圆的概率_求解四只鸭子在同一半圆池塘的概率
问题模型 有四只鸭子,随机分布在圆形的池塘中,请问四只鸭子同时处于同一个半圆的概率有多大? 统计模拟 使用计算机进行大量的随机实验,统计推断出未知变量的概率.我们将进行100万次独立采样试验,每次试验 ...
- 一个人赶着鸭子去每个村庄卖,每经过一个 村子卖去所赶鸭子的一半又一只。 这样他经过了 七个村子后还剩 两只鸭子,问问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
代码如下: #include <stdio.h>int main(int argc, const char *argv[]) {int sum = 2;int i = 0;int j = ...
- 4只鸭子在同一个圆圈内游泳,问:4只鸭子出现在同一个半圆内的概率是多少?Python解答
看到这个问题有些晚了,不过也挺感兴趣,索性花了5分钟写了个Python的.发现已经有许多其它博主使用了编程来进行解答,我看了个Java的,思路也是大同小异.在此之前我已在百度知道上进行了回答 问题: ...
- 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB
练习题4.圆中四只鸭子在同一个半圆的概率 参考思路: 蒙特咔罗法 (进行N次试验,每次试验生成4个随机点,统计四点在同一个半圆的个数)相关知识点: input.if...else.for循环或whil ...
- 4只鸭子在同一个圆圈内游泳,问:4只鸭子出现在同一个半圆内的概率是多少?Python模拟
这是微博上看到的问题,c站上也有很多解答,我看了一圈发现计算都太复杂,我这里有个想法,可以简化计算. 将4只鸭子在一个半圆的问题等价为4只鸭子随机分布在周长上,一个半圆就是一个半周长,(根据圆的角度投 ...
- 四只鸭子在一个水池中,分别随机出现在圆圈中任意一点,四只鸭子出现在同一个半圆的概率是多少?
上个月在网上看到一道数学题,于是写了个算法进行计算,别人和我说这叫蒙特卡罗. 题目如下: 我写的代码如下: package DuckCircle;import java.util.Random;pub ...
- 一道数学题引发的惨案!4只小鸭子在一个圆形的大水池中,分别随机的出现圆圈中任意一点。4只鸭子在同一半圆内的概率是多少?
答案在文章结尾,不感兴趣的可以直接看答案 也就是昨天在渣男开车群中惊现一张照片.4只鸭子! 然后一群渣男开始了激烈的讨论,有说1/8的 有说3/4的 有说1/3的-反正说什么的都有 唉你说都是男的好好 ...
最新文章
- 那xxx.class.getName()為什麼能這樣寫?? 看了半天都快搞不清楚到底在程式中的example到底是class ? object ? 還是instance了
- 怎样解决样本不平衡问题
- SAP之成本中心类型与功能范围
- windows常用进程
- 提示以下的错误信息:“未能在设计视图中打开, 块中,以不同方式将值括起来 ”...
- iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通
- mysql sphinx 中文搜索_sphinx+mysql+mmseg 实现中文全站搜索 安装配置文档
- (计算机组成原理)第三章存储系统-第四节:主存储器和CPU的连接
- ORA-12638处理
- 【新书推荐】【2020】卫星通信(第三版)
- STC8单片机驱动ADS1256多路AD采集
- 曾经的理发店小弟,现在是阿里P10技术大牛
- NDT Matching 算法学习
- ICM TSCC视频格式的播放
- electron中引入iohook来监听系统级鼠标键盘事件
- Python爬虫必备知识点--整理核心基础
- 【MTK官方工具】最好用的MTK官方工具
- 节日献礼:Flutter图片库重磅开源!
- SPL 工业智能:识别指定工况
- diary在matlab,在MATLAB中,命令“diary on/diary off”表示()
热门文章
- linux 调度类,了解RT调度类linux的dequeue_rt_stack()
- 如何利用python进行在线语音识别
- 【bzoj2006】【NOI2010】【超级钢琴】
- Java面试100问
- PC构件行业发展概况及竞争格局、发展趋势
- linux-mptcp调度算法,基于RSFSA的MPTCP数据调度算法的研究
- Openzwave库中对Zwave产品配置文件的使用
- 2021年质量员-市政方向-通用基础(质量员)免费试题及质量员-市政方向-通用基础(质量员)考试技巧
- java8怎么通过LocalDate获取上个月的时间
- l36h android 4.4,推送在即?索尼L36h升级安卓4.4截屏流出