在windows的世界裡,3D功能是一個比較熱門的話題,大多數的游戲都是基於3D的。但在*nix的世界,3D好象就不是那麼太重要的,甚至有的“大俠”級的高手,竟然不知道有3D功能的存在。本人為了將筆記本的3D功能啟動(操作系統用FreeBSD),費盡了心思,整日游蕩於sourceforge和google之間,終於經過近一個月的努力,打開了3D 功能,將主要的問題羅列於下:
一、FreeBSD下實現3D的原理
其實這不僅僅是FreeBSD下的原理,也是整個*nix家族的原理。
3D功能的實現其實也是分層的,近似於OSI的分層模型。
(1)、在最上端,是應用層,就是應用程序提出3D渲染的申請。這個申請通過一個函數調用,從而調用下面一層的3D加速的調用接口。
(2)、3D加速的函數接口(API)。它將應用層的各個應用轉換為系統的調用,從而可以讓X系統去和硬件打交道。最流行的API包括: DirectX,OpenGL等。在*nix的領域,就不得不提到一個Windows領域比較陌生的名詞:MESA。最原始的Mesa就是一個 OpenGL的實現,現在的Mesa在許多地方都有所突破。
而這些函數和X系統的接口,就是GLX。GLX是運行在X上的一種協議,能過它,函數調用才能和X系統打交道。
(3)、DRI。這是實現3D功能最重要的部分。
DRI是Direct Rendering Infrastructure,可以簡單得把它理解為X和硬件間的接口。但它包含很多獨立的模塊,負責從X到硬件的各個環節,包括內核。
它最主要的工作就是將Mesa或OpenGL的函數調用轉換為硬件的指令,從而指揮硬件進行渲染等工作。
(4)、DRI驅動程序。這是直接和硬件相關的程序。它提供對硬件的支持。
二、實現的條件
由前面的介紹可以知道,最重要的事情就是讓你DRI支持你的顯卡。目前為止,在FreeBSD中,DRI支持以下幾個系統的顯卡(在/usr/src/sys/i386/conf/NOTES中有介紹)。
如果你的顯卡是nVidia的,那麼你不要悲傷,接著往下看,你會發現你選擇nVidia是沒錯的!如果你的顯卡在上面列出了,那麼你也不要高興得太早,因為這些當中都有例外,就比如說我的筆記本顯卡:ATI IGP 340M,就是很難實現3D的一款。
測試你的顯卡是不是能實現3D功能,可以采取以下辦法:
(1):dmesg | grep agp,如果出現
agp0:
mem 0xe0000000-0xe3ffffff at device 0.0 on pci0
的字樣,那麼你的顯卡就有可能實現3D功能。如果什麼也沒有的話,那麼恭喜你,你再也不用為3D功能而費心了,你應該毫不猶豫地關上這篇文章,並且在你得到新的顯卡前也不用再打開。
(2):kldload drm,如果沒報錯的話,那麼你的顯卡基本上就可以實現3D功能了。如果很遺憾地報錯了,那麼你成功的機率就減小了一半,或者說希望不很大。
(3):前兩關都過了,就可以實驗了。
三、3D功能的實現
1、普通顯卡產:(1):安裝好Xorg和KDE(Gnom也可以)。
(3):startx。這時候會出現三個窗口和一個時鐘。有的人可能覺得是什麼地方出錯了,其實這是對的,因為這個時候,你還沒有進入KDE。
(4):退出X。在最左邊的窗口中輸入:exit。或者按ctrl+Alt+BackSpace。
(5):cat /var/log/Xorg.0.log | grep " Direct Rendering enabled",如果出現下面的字樣,
(II) RADEON(0): Direct Rendering enabled
那麼你的3D就啟用的。如果沒有,那麼你要仔細讀/var/log/Xorg.0.log。它會在某一行告訴你沒啟用的原因的。
安裝完成再啟動X,這時候就會在KDE之前出現一個nvidia的圖標,很快就閃過去。(但本人現在已經沒有測試環境,要不也可以用相機拍下來。)只要出現這個圖標。那就說明你已經安裝成功了。