当前位置:读零零>都市言情>传奇软件帝国> 第106章 捡到一个亿
阅读设置(推荐配合 快捷键[F11] 进入全屏沉浸式阅读)

设置X

第106章 捡到一个亿(2 / 2)

子充满他的心。

“让我静静。让我把思绪好好理一下。”王诺岳对自己说道。

idsoftware是一家成功的游戏公司,这家公司的成功,有一半要归功于约翰·卡马克,一个天才的程序员。他最出色的技术是计算机图像领域。他在doom上第一次使用了二叉树分割技术,在quake中第一次使用表面缓存技术,在doom3里面使用了“卡马克反转”(即shadowvolume的z-fail方法,这并不是卡马克首创,但他是独立研究出来)。然后,就是这个平方根倒数速算法。

平方根倒数速算法并不是卡马克发明的,它的发明者,在三十年后也没清楚。但它的重要性和实用性,却毫无疑问。

王诺岳想起了梦境中,《雷神之锤》能称得上流畅的画面,和同时期其他游戏一帧一帧的画面。而《雷神之锤》3d引擎性能远超同时期的其他游戏引擎,一个主要原因就是采用了这个算法。

在处理坐标转换与光源的专用硬件设备出现前,3d图形程序的光照和投影效果需要使用正规化向量来实现,而计算正规化向量,则要用到浮点数的平方根倒数。因为每秒都需做上百万次平方根倒数运算,这导致软件的计算速度相当之慢。而这个算法,能将计算速度提高4倍。

王诺岳继续清理自己的思路,当2005年《雷神之锤》的原代码在网上发布的时候,这短短十行的程序引起了轰动。因为它减少了求平方根倒数时浮点运算操作带来的巨大的运算耗费。虽然王诺岳的主攻方向不是计算机图形学领域,可也跟风看了一下,大致的算法还是记得的。

这个算法最关键的地方,是接收一个32位带符号浮点数,然后将之作为一个32位整数看待,以将其向右进行一次逻辑移位的方式将之取半,并用十六进制“魔术数字”减之,如此即可得对输入的浮点数的平方根倒数的首次近似值;而后重新将其作为浮点数,以牛顿法反复迭代,以求出更精确的近似值,直至求出匹配精确度要求的近似值。

最初人们猜测是卡马克写下了这段代码,但他否定了这个观点,并猜测是优化雷神之锤的资深汇编程序员terjemathisen写下了这段代码;而mathisen表示,在1990年代初,他只曾作过类似的实现,确切来说这段代码亦非他所作。

不过,王诺岳没记住这个魔术数字。但没关系,他记得大致范围,为了价值几亿美元的3d游戏引擎,他可以组织一个小组,专门来寻找这个魔术数字。

上一页 目录 +书签 下一章