• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            在面試一個游戲編程職位前,你需要知道的東西(轉)

            很長時間以來,游戲產業不允許新的血液加入,因為每個職位都要求申請人有2年以上的經驗.   但是現在是加入游戲產業的最好的時機.   因為研發隊伍的急劇增長,   有經驗的人很難找了,   所以越來越多的公司從大學里招人.   不管你上的是什么大學,你都有機會在游戲產業里找到一份工作.   你需要熟悉以下領域. 
                    數學   -   對于視頻游戲開發,這個非常重要.   不,你不需要去記如何求一個繞x軸旋轉的曲面的表面積.   你需要有很好的線性代數技能.   如果你不知道點乘的公式(a   dot   b   =   a.x   *   b.x   +   a.y   *   b.y   +   a.z   *b.z   )和它的幾何意義( ¦a ¦   * ¦b ¦   *   a和b夾角的余弦),   你是不可能獲得工作的.   你需要知道如何把一個向量投影到另一個向量上(a到   b的投影   =   (a   dotb)/ ¦b ¦^2*   b)   以及一個平面上.   你需要知道向量積(叉乘)是什么(a   x   b   =   [a.y   *b.z   –   a.z   *   b.y,   a.z   *   b.x   –   a.x   *   b.z,   a.x   *   b.y   –   a.y   *   b.x]),以及它的幾何意義(一個和兩個向量都垂直的向量,長度等于原來兩向量的長度乘以兩向量的夾角的正弦).   我記憶向量積公式的方法是把i,j,k   放在矩陣的第一行,然后是第一個向量,最后一行是第二個向量,   然后計算這個行列式.   如果你不知道什么是行列式或者如何計算一個行列式,   這可不是個好的信號!   你應該知道一個矩陣的逆以及如何計算,你應該知道如何轉置一個矩陣.   你應該知道什么是正交矩陣以及求它的逆的簡單方法(求它的轉置就行了).   熟悉各種坐標空間之間的轉換是很重要的.   碰撞檢測函數背后的數學原理也很需要學習.   你如何找到一條光線和另一條光線的碰撞點?一個平面呢?一個球面呢?   什么是四元數(quaternions)?   你如何對它們做一些常見的操作?   如果你的數學已經不那么熟了或者不知道如何開始,   我推薦   "3D   Math   Primer   for   Graphicsand   Game   Development".我讀過以后發現它很好地覆蓋了所有的基礎知識.   我沒有讀過別的書來做比較,   但是這本書肯定會給你打下很好地基礎,同時它也是很多游戲開發中常見數學運算的參考資料. 
                    物理   -   你需要對各種拋物體的公式非常熟悉.如果你不能記住或推導出d   =   v0   *   t   +   0.5   *   a   *   t^2,   你肯定會在面試或編程測試中遇上麻煩.   你應該能輕松解決任何涉及到拋物體和重力的問題.不論未知量是重力加速度,   發射角,   y方向速度,   xz方向速度,   時間,距離,   或其他任何可解的組合,你應該能沒有任何困難的求出解來.你應該熟悉彈性和非彈性碰撞下的動量和動能變化.   滑動和摩擦力也是你應該理解的概念. 
                    C++   -   雖然一些地方還在用c多過c++,但是C++已經是游戲編程中向被廣泛接受的幾乎標準的語言.   C++的知識是非常重要的.因為如果用的不好,   你會寫出非常糟糕的代碼.首先,你應該知道什么是虛函數,以及如何使用它.   理解虛函數表是如何工作的也同樣重要,這樣你就能夠理解當你調用虛函數時需要的額外步驟,這些步驟會降低性能(每個對象都有一個隱藏的虛函數表指針[具體在哪取決于編譯,并且對指針做類型轉換時,this會有變化],這樣調用一個虛函數,你需要根據這個指針找到那個函數表,然后跳到它所包含的函數指針所指的函數里,這會降低cache的效果).   知道如何有效地使用模板和操作符重載也很重要.   關于C++,好的OO設計是最重要的.   最常用的一些類層次很深而且很費解,你最后需要做可怕的虛擬繼承或者為一些不需要的變量浪費內存. 
                    人工智能   -   我在大學里學習了標準的人工智能課程,但是這些東西沒有一點在游戲AI中是可接受的.   教的很多算法很難實現或者對游戲而言不現實.   你知道什么是有窮狀態機就夠了.   絕大部分游戲使用有窮狀態機,   而那些不用這個的游戲,使用的是簡單的基于規則的系統.   "白與黑"(包括它的續集)是我能想到的唯一的使用了其他東西(神經網絡)的例外,   而且很多玩家對它的結果并不滿意.   如果你想找本書,   我推薦"AI   Game   Programming   Wisdom   3".   里面有兩篇特別優秀的文章,一個是關于有趣的游戲AI設計,另一個是關于行為合成.   嚴肅的說,雖然書會很有幫助,但是學習游戲AI的最好的方法是實際做一個. 
                    圖形學   -   這是一個重要的領域.   如果圖形是你的主要感興趣的方向,那么你應該知道的比這里說的多.但是,不論你想要在這個產業里做什么職位,   你應該知道一些基礎.   你需要知道什么是渲染狀態以及通常都有哪些渲染狀態?(cull,   z   write,   ztest之類的).什么是標準的光照方程?(I   =ka*Ia   +   Ii*(kd*(L   dot   N)   +   ks*(R   dot   V)^n)   ).   材質映射是如何工作的?材質的wrapping和clamping有什么區別?   如何高效的渲染程序中一組幾何體?(按照渲染狀態組織你的幾何體,按照你的硬件最快的primitive分批,飯后發給圖形卡).你需要知道   skinning   是如何工作的.   如果你對書感興趣,   我推薦   "3D   Computer   Graphics".   這個不是專為游戲寫的,多以它包括了一些在游戲中不現實的技術.但是,我想一個總體的了解是有幫助的,而且,隨著游戲硬件的發展,   那些現在看來不現實的技術會變的普通的. 
                    工具開發   -   C#   看來在游戲業界獲得了不少地位.所以你也應該讓你熟悉一下C#.C#在加快工具的開發上表現出不少優勢.很多人說工具可以制造下一代的游戲,   我同意這一點.   擁有的工具越多,團隊花在可以被輕易自動化的工作上的時間就越少.   可能你的團隊有10個美工,   花程序員的一個人年來開發一個可以給美工每天省15分鐘的工具并不值得,但是如果你有50個美工,那這就肯定值得了.C#可以快速的創建GUI,而且和其他一些能簡化創建GUI的方法不同,   這些GUI很好理解和使用,因為他們是標準的windows組件,允許你方便的設定快捷鍵,就像其他Windows程序一樣.   Visual   Studio   里的Form   Designer   真的很好用,而且C#的metadata和event驅動的設計使得工具的開發輕而易舉.你最好也對mfc有基本的了解,因為可能面試你的開發人員會有點落后與時代.如果你有興趣學習很多關于這些技術是如何工作的(這會讓你寫出更好的C#代碼),我強烈推薦"Applied   Microsoft   .NET   Framework   Programming",我在空閑的時候讀這本書,然后我就不能放下了.我一章一章不停的讀,因為我是那么激動的像學習下一章的話題了.記住,   這本書不會教你各種framework里的類和這些類是干嘛的.它講的是這個語言的核心機制,它是如何工作的.   這本書也不是專門為C#寫的.   它告訴了你如何用VB.net做一些在C#里不能做的是,它還提供了用MSIL(MicrosoftIntermediate   Language,   所有.net語言的編譯器都會編譯出這種字節碼)寫的例子,實現一些不被任何一種.net語言支持的功能. 
                  操作系統   -   雖然這個看起來和這個和游戲開發相對而言不是太相關,   但是我很高興我在大學學習了操作系統的課程,因為我經常會用到從這門課學到的知識.   關于操作系統的知識非常重要,因為它在幕后為程序處理著很多重要的工作.特別是由于下一代的游戲終端和雙核PC上的多核特性,多此案成的知識是至關重要的.對虛擬內存的了解當然是很有用的.關于文件系統,內核態和用戶態切換,分頁的知識對PC游戲開發更為有用,   不過隨著一代代的發展,終端也在變的越來越像PC.所以,知道這些東西沒有壞處. 
                編譯器   -   雖然知道如何寫一個分析器可能并不重要,   但重要的是知道你的代碼是如何編程匯編代碼的.這樣你就能明白如何寫出更優化的代碼.你顯然必須熟悉把你寫的程序變為可執行文件的4個步驟:預處理、編譯、匯編和鏈接.   編譯器如何處理常量的?   很好的理解宏和知道如何用它來簡化一些常用的操作是很重要的.   知道你正在用的編譯器的調用約定,因為參數超過一定數目的時候,會導致它們被放在棧上而不是在預留的寄存器里.   調用約定的知識在你用匯編寫函數的時候也是有用的. 
                這些只是一個作為一個游戲程序員,你應該具備的各種知識和技能的入門介紹.   對每個領域,根據你的工作類型,總會有更多的你需要學習的東西.   知道一些實際使用的知識之外的東西總是沒有壞處的.

            ================================================

            這幾條中估計只有物理是程序員的弱點,根據我觀察,程序員中物理強的人很少。我很幸運,啊哈哈~~

            C\C++\C#我都會,呵呵。起碼在計算機語言上困難不大。不過我很看好C\C++,C#.NET運行太慢了。

            我懷疑這個文章該不會是MS的人在宣傳他們的C#.NET吧   !!! ⊙_⊙ !!!

            posted on 2009-01-04 14:02 RedLight 閱讀(2532) 評論(2)  編輯 收藏 引用 所屬分類: 3D渲染技術C++功夫篇

            評論

            # re: 在面試一個游戲編程職位前,你需要知道的東西 2009-10-04 03:00 程少偉

            呵呵, 分析的很不錯, 特別的對我這個自學3D編程的人, 謝謝樓主的分享。  回復  更多評論   

            # re: 在面試一個游戲編程職位前,你需要知道的東西(轉) 2010-07-30 07:29 好看網

            學習了 想走游戲  回復  更多評論   

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            公告


            Name: Galen
            QQ: 88104725

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            相冊

            My Friend

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久国产精品免费无码| 污污内射久久一区二区欧美日韩| 亚洲欧洲日产国码无码久久99| 伊人久久大香线蕉av一区| 精品久久久久久久久午夜福利| 久久97精品久久久久久久不卡| 亚洲人成无码网站久久99热国产| av色综合久久天堂av色综合在| 国产精品一区二区久久精品| 污污内射久久一区二区欧美日韩| 欧美噜噜久久久XXX| 免费精品久久久久久中文字幕| 久久国产色AV免费观看| 欧美午夜A∨大片久久 | 久久国产一片免费观看| 久久久久人妻一区二区三区| 久久亚洲精品中文字幕三区| 久久久久久久波多野结衣高潮 | 久久久免费观成人影院 | a级成人毛片久久| 狠狠色丁香婷婷久久综合| 国产 亚洲 欧美 另类 久久| 精品无码久久久久久午夜| 久久久久久久久久久久久久| 欧洲国产伦久久久久久久| 国産精品久久久久久久| 国产免费福利体检区久久| 色综合久久久久| 日本久久久久久中文字幕| 99国产欧美久久久精品蜜芽| 午夜精品久久久久久毛片| AV无码久久久久不卡蜜桃| 中文字幕无码免费久久| 久久久一本精品99久久精品88| 午夜精品久久久久成人| 欧美性猛交xxxx免费看久久久| 国产午夜精品久久久久九九| 99久久99久久精品国产| 国产精品日韩深夜福利久久| 久久国产精品视频| 亚洲国产综合久久天堂|