創建3D圖形引擎(4) 摘要:
盲目地繪制成千的物體而沒有執行任何的剪切,是導致在圖形-渲染通道中時間延遲的一個主要原因。需要再次使用視錐以快速確定哪些物體位于視野中,為了確定哪些物體是可見的,可將每個三維物體包圍到一個可見的球體中,稱之為框界球體(bounding
sphere)。
下圖演示了框界球體和視錐的運用,它展示了一個場景,其中有三個物體和一個視錐,每個網格模型都有一個可見的框界球體圍繞著它。當一個球體位于構成視錐的6個平面前時,它就被認為是可見的。可以看出僅兩個位于視錐中的物體是可見的,而另一個物體完全位于視錐外,繪制時能完全跳過那個位于視錐之外的物體。為了實現這一點,必須計算每個物體的框界球體,然后檢測球體是否位于視錐之內。
創建3D圖形引擎(3) 摘要:
在每幀中繪制所有的多邊形是非常低效的,為了提高處理的速度,可以僅渲染那些位于視野內的多邊形,同時應避免掃描場景中的每個多邊形來確定哪些多邊形是可見的。如果不每幀進行搜索,又如何知道哪些多邊形是位于視野內呢?解決的方法就是將一個三維模型分解為一些較小的塊(稱為節點nodes),其容納較少的多邊形。然后將節點排列到一個特定的結構中(一棵樹),以便進行快速搜索,并確定哪個節點是可見的,然后渲染這些可見的節點,通過使用視錐,可以找出哪些節點是可見的。取代搜索數千個多邊形,通過搜索一個小小的節點集合,就能決定怎樣進行繪制。節點樹引擎適用于任何的網格模型,并將它拆分為節點,以便快速渲染網格模型(網格模型代表了游戲的層次)。
創建3D圖形引擎(2) 摘要: 本篇是創建3D圖形引擎(1)的續篇,3D圖形引擎的代碼以創建游戲內核中編寫的代碼為基礎進行開發。
視錐(viewing frustum)是6個平面的集合,它從觀察點向外擴展,以確定某個多邊形是否能夠被觀察到。
首先,可以將視錐看作是一個以觀察者開始擴展的金字塔。
創建3D圖形引擎(1) 摘要:
使用單一的網格模型雖然可以同時渲染整個層次,但卻意味著那些沒有被看到的部分在通過渲染管道時會被裁剪掉,也就是說這樣做會浪費時間。不要沮喪,因為使用一個單獨的網格模型進行層次的渲染仍然有一些非常好的方法。比如說,在游戲世界中包括了單獨的地牢,每個地牢包含不同的房間,所有的房間通過走廊連接到一起。其實,每個房間和走廊就是一個單獨的網格模型,所要做的就是在游戲的處理過程中加載以及釋放那些代表地牢房間的網格模型。