神奇卡馬克

2021-05-06 16:25:36 字數 1155 閱讀 2720

卡馬克主要成就基於他在3d方面的研究,idsoftware開發的著名遊戲有德軍總部3d(wolfenstein 3d)、毀滅戰士(doom)和雷神之鎚(quake)等等。這些遊戲和它們的後續版本都取得了巨大的成功。

卡馬克創造的遊戲引擎還用來製作其他的第一人稱射擊遊戲,比如半條命(half-life)和榮譽勳章(medal of honor)。呵呵,這些遊戲也都是享譽盛名吧。

卡馬克還是乙個開源軟體的倡導者,先後放出了德軍總部3d,毀滅戰士和雷神之鎚的源**,贊乙個先。

這裡是維基百科上對他的簡介。

卡馬克另人驚訝的地方還在於找到了乙個求平方根的magicnumber,太神了,不知道他怎麼找到的,根據他的簡歷,貌似沒有受到過數學的系統訓練哈。下面是全文:

有人在quake iii的源**裡面發現這麼一段用來求平方根的**:

0×5f3759df? 這是個什麼東西? 學過數值分析就知道,演算法裡面求平方根一般採用的是無限逼近的方法,比如牛頓迭代法,抱歉當年我數值分析學的太爛,也講不清楚。簡單來說比如求5的平方根,選乙個猜測值比如2,那麼我們可以這麼算:

5/2 = 2.5; 2.5+2/2 = 2.25; 5/2.25 = ***; 2.25+***/2 = ***x …

這樣反覆迭代下去,結果必定收斂於sqrt(5),沒錯,一般的求平方根都是這麼算的。而卡馬克的不同之處在於,他選擇了乙個神秘的猜測值 0×5f3759df作為起始,使得整個逼近過程收斂速度暴漲,對於quake iii所要求的精度10的負三次方,只需要一次迭代就能夠得到結果。普渡大學的數學家chris lomont看了以後覺得有趣,決定要研究一下卡馬克弄出來的這個猜測值有什麼奧秘。lomont也是個牛人,在精心研究之後從理論上也推導出乙個最佳猜 測值,和卡馬克的數字非常接近, 0×5f37642f。卡馬克真牛,他是外星人嗎?傳奇並沒有在這裡結束。lomont計算出結果以後非常滿意,於是拿自己計算出的起始值和卡馬克的神秘 數字做比賽,看看誰的數字能夠更快更精確的求得平方根。結果是卡馬克贏了… 誰也不知道卡馬克是怎麼找到這個數字的。最後lomont怒了,採用暴力方法乙個數字乙個數字試過來,終於找到乙個比卡馬克數字要好上那麼一丁點的數字, 雖然實際上這兩個數字所產生的結果非常近似,這個暴力得出的數字是0×5f375a86。 神仙? 外星人? ^_^

參考:http://blog.csdn.net/looongson/archive/2009/03/09/3973971.aspx

卡馬克演算法

最原始的版本不是求開方,而是求開方倒數,也即。為啥這樣,原因有二。首先,開方倒數在實際應用中比開方更常見,例如在遊戲中經常會執行向量的歸一化操作,而該操作就需要用到開方倒數。另乙個原因就是開方倒數的牛頓迭代沒有除法操作,因而會比先前的牛頓迭代 由這個公式我們就很清楚地明白 y y threehalf...

卡馬克卷軸演算法

念 這裡使用簡化的概念,精確的定義請參考計算機圖形學中二維觀察流程。世界座標系 用於標註整個遊戲世界的座標系。攝像機 攝像機攝到的區域才能顯示在螢幕上,攝像機在本文中表現為乙個視窗,視窗內的世界才能顯示到螢幕上進而被看到。移動攝像機到不同的位置就可以觀察不同位置的情形。卡馬克卷軸演算法 如圖所示,當...

卡馬克卷軸演算法

概念 這裡使用簡化的概念,精確的定義請參考計算機圖形學中二維觀察流程。世界座標系 用於標註整個遊戲世界的座標系。卡馬克卷軸演算法 img 如圖所示,當前內容是 1230。當攝像機向右下移動時,其內容應該變為0564,這樣就形成了卷軸的效果。由原位置變化為新位置的具體做法是 使用兩個緩衝區 當前緩衝區...