1. 程式人生 > >【翻譯】 View Frustum Culling --1 View Frustum’s Shape

【翻譯】 View Frustum Culling --1 View Frustum’s Shape

near com 矩形區域 狀態 翻譯 cnblogs 位置 移動 距離

這是一些列來自lighthouse3d的視錐體裁剪教程。旨在學習總結,及便於查閱。

1、視錐體的形狀

在OpenGL中,透視投影是由兩個函數定義的gluPerspectivegluLookAt。我們先來回顧下這兩個函數的參數

  • gluPerspective(fov, ratio, nearDist, farDist);
  • gluLookAt(px,py,pz, lx,ly,lz, ux,uy,uz);

照相機的位置在四棱錐的頂點處(px,py,pz) 記為向量p,

觀察點的位置在(lx,ly,lz) 記為向量l,

這樣照相機朝著觀察點發出的射線的就可以記為d = l - p,

近平面和遠平面都與d垂直,它們與攝像機的距離分別為nearDist和farDist。

近平面與遠平面上的矩形區域的小可以由fov(照相機垂直的視角)和ratio(照相機水平的視角)計算出來。

計算公式如下:

     Hnear = 2 * tan(fov / 2) * nearDist
     Wnear = Hnear * ratio
      Hfar = 2 * tan(fov / 2) * farDist
      Wfar = Hfar * ratio

技術分享

為了進行視圖裁剪,我們分兩步走
  1. 在每次視錐體變化時,提取視錐體的提及信息。比如,當相機移動或者當透視的參數發生變化時;
  2. 根據視錐體的體積測試對象以及確定是否剔除--必須對每一幀中的每個對象執行此操作。如果每個對象的
    剔除狀態從幀到幀保持不變,則測試本身可以僅在相機移動時進行,即當視錐體更新或透視改變時。

【翻譯】 View Frustum Culling --1 View Frustum’s Shape