从国外网站上自己翻译过来,以前cnBeta上有报道,这篇是此技术原创者的官方解释翻译,若有错误,敬请指正.
出色的电脑游戏都会使用不同的图形引擎处理子系统—我们常说的3D引擎.例如Soure引擎(国内译名”起源”引擎,Half Life 2所使用),Unreal引擎(国内译名”虚幻”引擎,虚幻竞技场实用).IdTech4引擎(for:DOOM4),Cry2引擎(for:孤岛危 机),Clever’s Paradox引擎,这些都是在玩家间及游戏业界非常出名的图形引擎.下面您将了解到的是一个全新的3D图形引擎:Microsoft Excel为我们所熟知的Excel是个全方位的办公工具软件,但它也有不为人所熟知的另一面,那就是它拥有一些功能特性,使得Excel可以作为一个优质的3D绘图引擎被使用。
通过这篇文章,我会展示Excel的算术运算,嵌入式渲染子系统(这里有两个不同的渲染子系统)和革命性的方法,理解这些仅需要你做一个思维观念上的重大 转变。我希望你能发现Excel有效地和迅速地整合了实用性等众多的特点,多平台的可移植性,和基于独特且超现实的3D引擎特性为依托的高性能
章节中甚至有演示程序和短片, 这些都是由Excel 3D引擎创建的。
警告:非专家请谨慎尝试!
数学运算:
也许证明Excel的数学运算功能,仅需要有一个示范,至少在所有需要演示中这项是最少的。3D物体的操纵的核心函数(例如:四则运算,三角函数,矩阵代 数)是Excel的本质所在---但它们是值得研究的,因为他们无与伦比的布局特点和良好的简约性,目前在整个流行的3D引擎领域,Excel犹如高塔般 耸立。(作者有点夸张,因为网上的演示虽然值得称赞,但远没有到达作者夸耀的地步)
合理的布局
很可能不会有游戏引擎能够解决整个三维算法问题,仅仅在半个屏幕大小的空间上。上半部分图1包含的空间位移,旋转的X , Y , Z轴和透视投影等等。这些都可以在演示程序看到,多边形的透视,Z缓冲(是在为物件进行着色时,执行“隐藏面消除”工作的一项技术,所以隐藏物件背后的部 分就不会被显示出来。在3D环境中每个像素中会利用一组数据资料来定义像素在显示时的纵深度,即Z轴座标值。Z缓冲所用的位数越高,则代表该显示卡所提供 的物件纵深感也越精确。目前的3D加速卡一般都可支持16位的Z Buffer)和反射的计算,所需的屏幕大小近似.

图1:3D引擎的实质
黄色标记了用户定义的参数,绿色指出的是引擎的计算数值,数字区域包含了如下一些数据(以下基于本人的计算机图形学知识)
1.透视投影的参数。
2.3D物体的坐标相对坐标(相对于物体的中心)
3.矩阵平移变换和旋转变换
(更多信息可以通过如下链接找到http://en.wikipedia.org/wiki/3D_projection)
4.旋转参数
5.在平移变换和旋转变换后,点的3D绝对坐标。
6.透视图影后,点的2维坐标。
7.点的屏幕坐标
8.物体边缘的终点
9.矩阵的平移旋转变换中的重要公式,这里我们可以更简洁和紧凑,看得非常清楚.
简洁性
Excel的开发环境,不仅允许程序员在编写时可以使用无格式的源码或者语法高亮突出的源代码,而且它也提供了其所有众所周知的格式化功能函数给引擎开发 人员:一些字体可以同时使用(不同的大小和类型);单元格和彩色文本;允许添加可弹出的提示;甚至是声音 (例如: “sit down”),也可以在整个电影需要的地方插入。
渲染方式
开发人员可以选择在2个渲染子系统间选择:
1.Excel自身的单元格图形(以下简称ECG)
2. 基于Office套件的图形抽象层(以下简称OGAL)
Excel自身的单元格绘图
启动Excel后,立刻忘记以往的习惯,我们可以看到充斥着单元格的EXCEL表格在屏幕上,以及包含我们所需数据的单元格,文本和公式。在这个屏幕上尝试着认为这个表格就是普通引擎的屏幕,而单元格就是一个个像素。
在此基础上不寻常的办法:
工作表=引擎的可视屏幕
单元格=像素点
毫无疑问,这是一个令人惊叹的模拟近似,接下来的问题就是如何将这些散装矩形形状的单元格可被视为像素?但我们会看到,这些矩形只是展现一个独特的功能的细胞图形,事实上,在适当的时候,和一般的小,老式的方块像素一样,在需要的时刻这些细胞图形的用法与以前并无二致。
抛开你对新事物的反感情绪,并看看ECG特性:
像素是可以调整大小的,因此如果有人想像过去那样.继续使用小的,老式的方块像素来开发,就像在传统的三维引擎中那样,也许能使他/她觉得这样可以开发更容易些(请见图2和3 ) 。

图2:Excel中的默认像素实例

图3:调整大小(色调)的像素,趋于传统
应该指出的是,这种革新是该系统的一个有机组成部分,允许所使用的像素,在每行每列的大小不同,可以看出在图4 。

图4:像素在每行设置不同的大小
这个特殊的大小调整的最好例子,就是Excel的默认设置,在默认设置下常规像素变成了矩形形状,这是很容易让我们混淆,将他们作为数据输入区来看待。
大多数用户甚至不会意识到,这些都是像素,仅仅见他们作为数据区域来看.

图5:没有网格线的渲染

图6:带有网格线的渲染
·如果需要,可以使用占据极小像素点大小的网格线。在行和列有不同的大小的情况下,这是一个非常有用的功能。您可以通过图5和图6看到网格线功能.
·象素的颜色可以设置24位存贮模式(即2的24次方种颜色)。
·255x65535屏幕分辨率,所带来的好处是,可以使用近16.7百万像素的分辨率,这在其它3D引擎中是未发现的。
·惊人的1:256的长宽比,使得我们可以设置隐藏/隐藏功能,以获得4:4, 16:9或其他任意比率。
·可以拥有255屏幕在一个工程中,所以不止是一般的2个,将会有更多的画面缓冲器可以一起使用。
·内置在变焦功能,利用函数可以放大或缩小像素。
可以这样说, ECG超越了其时间和包含了很多独特和无可比拟的特点是不容易在其他的三维引擎找到的:可变大小的像素,任意变长宽比, 16.7百万像素的分辨率,可切换的像素大小的网格线。
如图所示(图7 ),可以看的到这引擎的实际表现(在渲染网格线的情况下) 。您可以开始演示下载我们的例子中的Excel引擎文件(Excel的询问时, 启用宏) ,迫切的Alt +按F8键和运行ecg_demo 。

图7:运算中的引擎(ECG渲染子系统)
缺点是ECG的速度不够快和缺乏一些常见的引擎功能(例如,绘制线,材质贴图等) ,必须由开发员自行开发。
基于Office套件的图形抽象层
若是没有对ECG的先进功能的需要,像是可调整大小像素和可变长宽比率,那么 Excel的其他绘制子系统-整体中剥离的图形抽象层---是另一个选择。
OGAL提供的附加功能(多边形绘图,填充等),体现出更高的性能和兼容性与其他应用程序的的MS Office套件。如果需要将3D的应用程序进行移植,此兼容性能是非常有用的.
这是一个奇特的渲染过程,渲染是表现在工作表单之外的一个单独的层,所以子系统可以在不修改现有的内容的工作状态下运行
此特性使得有可能运行OGAL和ECG并驾齐驱,或显示的背景和他们的计算结果就在同一个屏幕上-这有助于调试过程。截图运行OGAL子系统在下面可以看到(图8 ) 。
在工作表单前面的独渲染层是很便于观察的:虽然旋转立方体的画面是由这一层提供,但3D的计算的部分由引擎负责,可以在背景中看到。

图8:运行中的引擎(使用的基于OFFICE组件的抽象图像渲染层)
一个典型OGAL子系统表现的例子就是可见的多边形:而借鉴于目前的3D引擎的基本处理对象是三角形, OGAL也支持其他多边形(如四边形,五边形等)。
这里不需要一个单独的背景缓冲区,因为OGAL将会处理好一切。颜色可以设置由24位存贮方式,而子系统为的透明度提供了额外的Alpha通道。示范档案可在我的例子中Excel文件引擎找到-对于如何避免实时时间,在录像中都有演示:
警告:你非常-非常确定你是个专家!否则慎用
思维的转变
连续性从本质上影响我们在实际编程中的语句表达。它出现在你编程事业的每一个角落:每天数以千计的程序代码,一步步创建可执行文件(就像定义在make程序的描述文件那样),调试运行一条条命令。
数以千计不同的程序和几十亿的源代码行,都是被连续性思维方式所创造。连续性贯穿我们目前的编程模式,使许多程序员不会怀疑其存在的合理性,并被它的局限性所制约,这是理所当然的事。
注意:请不要低估习惯的力量!也许您有一个QWERTY键盘(指我们所用的标准键盘),其实那是一个有意排列使你不舒服的布局!