檢視轉換 (Direct3D 9)
本節介紹檢視轉換的基本概念,並提供如何在 Direct3D 應用程式中設定檢視轉換矩陣的詳細數據。
檢視轉換會找出世界空間中的查看器,將頂點轉換成相機空間。 在相機空間中,相機或查看器位於原點,正向 z 方向看。 回想一下,Direct3D 會使用左手座標系統,因此 z 會正面進入場景。 檢視矩陣會將相機位置中的物件重新定位到相機位置-相機空間的原點和方向。
有許多方式可以建立檢視矩陣。 在所有情況下,相機在世界空間中都有一些邏輯位置和方向,可用來建立將套用至場景中模型之檢視矩陣的起點。 檢視矩陣會轉譯並旋轉物件,以將它們放在相機空間中,而相機位於原點。 建立檢視矩陣的其中一種方法是將轉譯矩陣與每個座標軸的旋轉矩陣結合。 在此方法中,會套用下列一般矩陣方程式。
檢視轉換方程式
在此公式中,V 是正在建立的檢視矩陣,T 是重新定位世界對象的轉譯矩陣,而 Rₓ透過 Rz 是沿著 x、y 和 z 軸旋轉物件的旋轉矩陣。 翻譯和旋轉矩陣是以相機在世界空間中的邏輯位置和方向為基礎。 因此,如果相機在世界的邏輯位置是 <10,20,100>,翻譯矩陣的目標是將物件 -10 單位沿著 x 軸移動,-20 單位沿著 y 軸移動,沿著 z 軸 -100 單位。 公式中的旋轉矩陣是以相機的方向為基礎,就相機空間軸與世界空間的對齊程度而言。 例如,如果先前提及的相機直指,其 z 軸是 90 度 (pi/2 弧度) 與世界空間 z 軸的對齊,如下圖所示。
與世界空間相比,相機檢視空間的
旋轉矩陣會套用相同但相反的旋轉角度,套用至場景中的模型。 此相機的檢視矩陣包含繞 x 軸旋轉 -90 度。 旋轉矩陣會與轉譯矩陣結合,以建立檢視矩陣,以調整場景中物件的位置和方向,讓其上層面對相機,讓相機在模型上方的外觀。
設定檢視矩陣
D3DXMatrixLookAtLH 和 D3DXMatrixLookAtRH 協助程式函式會根據相機位置和查看點建立檢視矩陣。
下列範例會建立左側座標的檢視矩陣。
D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);
Direct3D 會使用世界和檢視矩陣來設定數個內部數據結構。 每次設定新的世界或檢視矩陣時,系統會重新計算相關聯的內部結構。 設定這些矩陣經常是耗時的計算。 您可以將世界和檢視矩陣串連到您設定為世界矩陣的世界檢視矩陣,然後將檢視矩陣設定為身分識別,以將所需的計算數目降到最低。 保留個別世界的快取複本,並視需要檢視您可以修改、串連及重設世界矩陣的矩陣。 為了清楚起見,這些範例很少採用此優化。
相關主題