1. 程式人生 > >圖形之可見面判別演算法

圖形之可見面判別演算法

圖形中,從3D的轉為2D顯示到顯示器上,處理的一般流程為:3D資料構建(包括紋理、方位、顏色、形狀、點資料、uv資料、相機等)、3D->相機世界的矩陣變化、相機視矩陣對世界的截切、投影到相機的觀察螢幕、螢幕剪下(獲取視口的所有畫素的顏色值)、顯示到顯示器。
可見面判別是其中3D轉2d過程中投影到相機觀察平面中重要的一步。判斷出那些面需要顯示,並最終獲取觀察平面的畫素的顯示顏色。
一般判別可以有後向面判別演算法、深度快取演算法、A快取演算法、掃描線演算法。
1、後向面判別演算法,根據3D中該面的法線方向和相機觀察向量的關係,來過濾掉與物體背面的面。基本可以處理掉百分之五十的面。
原理:假設某3D平面函式為: A*x+B*y+C*z+D=0,其法向量為N=(A,B,C),假設觀察向量 為V(X,Y,Z).通過兩個向量點積的值,獲取兩者夾角。N . V>0,則為後向面,需要剔除。
2、深度快取演算法。假設所有物體都要在觀察平面投影,則觀察平面的每個畫素有可能對應著若干個物體的點,而這個畫素的最終顏色決定於所有投影為該畫素位置的若干點的顏色和透明度。倘若都不是透明的,則觀察平面的顏色值肯定等於距離該平面最近的可見面的點的顏色值。而深度可以理解為所有投影為該畫素點的點,距離觀察平面的距離值。一般歸一化為0-1.
這也是為什麼一般設定相機都會設定相機的最大和最小觀察距離(為了歸一化也為了剔除部分物體)。
(ps。先寫兩個,改天繼續)