03 三維場景的基本要素 相機

2021-09-25 06:20:47 字數 1415 閱讀 3444

一、相機

觀眾的眼睛好比三維渲染場景中的相機,在vtk中用vtkcamera類來表示。vtkcamera負責把三維場景投影到二維平面,如螢幕,相機投影示意圖如下圖所示。從圖中可以看出與相機投影相關的要素主要有如下幾個:

1)相機位置。相機所處的位置,用vtkcamera::setposition()方法設定。

2)相機焦點。用vtkcamera::setfocuspoint()方法設定,預設的焦點位置在世界座標系的原點。

3)朝上方向。朝上方向即哪個方向為相機朝上的方向。就好比直立看東西,方向為頭朝上,看到的東西也是直立的,如果倒立看某個東西,這時方向頭朝下,看到的東西就是倒立的。相機位置、相機焦點和朝上方向三個因素確定了相機的實際方向,即確定相機的試圖。

4)投影方向。相機位置到相機焦點的向量方向即為投影方向。

5)投影方法。該要素用於確定actor是如何對映到像平面的。vtkcamera定義了兩種投影方法:一種是正交投影(orthographic projection),也叫平行投影(parallel projection),即進入相機的光線與投影方向是平行的;另一種是透視投影(perspective projection),即所有光線相較於一點。該投影方法最符合人類眼睛對於景物所產生的近大遠小的視覺習慣。

6)視角。透視投影時需要指定相機的視角(view angle),預設的視角大小為30°,可以用vtkcamera::setviewangle()方法設定。

7)前後裁剪平面。裁剪平面與投影方向相交,一般與投影方向也是垂直的。裁剪平面主要用於評估actor與相機距離的遠近,只有在前後裁剪平面之間的actor才是可見的。裁剪平面的位置可以用vtkcamera::setclippingrange()方法設定。

二、相機示例

#include vtk_module_init(vtkrenderingopengl2)

vtk_module_init(vtkinteractionstyle)

執行:

setclippingrange():設定相機的前後裁剪平面。

setfocalpoint():設定相機焦點位置。

setposition():設定相機位置。

computeviewplanenormal():方法是根據設定的相機位置、焦點等資訊,重新計算視平面(view plane)的法向量。

setviewup():設定相機朝上方向。

注意:一般該法向量與視平面是垂直的,如果不垂直,actor等看起來會有一些特殊的效果,如錯錯切。

三維場景的渲染優化

對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於3d應用程式來說,影...

GL 三維場景的組織

如何實現三維場景的組織?對比ae的三維控制項和ww的worldwindow。前文已述及 worldwindow有幾個重要的屬性 public class world renderableobject,這個需要研究一下。對比發現三者很類似 首先3個控制項都有乙個相機類物件,ww是camerabase ...

基本的三維旋轉

本系列教程的目的是解釋背後的旋轉點在三個方面所涉及的數學。這將開始描述如何使用乙個旋轉矩陣z軸旋轉點,僅僅是因為這是最簡單的旋轉,視覺化和實施。這就像乙個時鐘手繞來繞去。然後,將移動的教程給你的x和y軸的旋轉矩陣,告訴你如何使用它們,然後給你乙個矩陣,這將使繞任意軸旋轉。翻譯矩陣也將被覆蓋。將相機和...