我開始使用DirectX(和SharpDX,因此只能在C#/ hlsl中編程),並且正在嘗試構建自己的相機類。它應該是可旋轉的,允許向前和向後移動以及「橫向」移動(經典的第一人稱運動通常映射到A和D,在我的情況下加上和減小)。爲了更容易修正模型和世界空間在我的情況下是一樣的,透視投影還沒有實現,旋轉相機,我的相機應該看Z軸(進入屏幕)。我的錯誤修復模型是一個簡單的四邊形,它具有1.f寬度和高度,z = 0並且居中在屏幕上。
爲了便於使用,我發現了DirectX的Matrix.LookAtLH()
,我正在使用它來構建我的矩陣,以便從世界座標轉換到視圖座標,基於我的相機在世界座標中的位置,向上矢量(現在 - 不旋轉 - 總是正Y軸)和世界座標中的目標點。
我(頂點)着色器使用一個簡單的乘法與此矩陣:
output.position = mul(position, worldToView);
的注視矩陣計算如下:造成這幅畫
Matrix.LookAtLH(vec3(0, 0, -1), vec3(0, 0, 0.5f), vec3(0, 1, 0))
:
現在我想將我的相機向右,在這種情況下,通過將1.f添加到它的X座標。 我的預期結果與之前相同,四處移動一點。
我建立一個新的LootAt矩陣,動眼座標和目標座標由同一矢量:
Matrix.LookAtLH(vec3(1, 0, -1), vec3(1, 0, 0.5f), vec3(0, 1, 0))
在由此產生:
DirectX:查看矩陣的世界 - 我的誤解在哪裏?
這GET更極端的我移動攝像機的多,但中心的屏幕仍然保持四邊形的中心。這是否與我對Matrix.LookAtLH
的潛在誤解有關?
我有完全相同的問題,因爲OP。我已經嘗試在將視圖矩陣傳遞給頂點着色器之前調換視圖矩陣,但是這隻會使所有內容都消失。像在我的着色器中將矩陣聲明爲row_major一樣。以及扭轉多功能中的論點。這些事情的任何組合或者導致一個空白的屏幕,或OP的確切圖像。有什麼建議麼? – Camander
我想通了出錯的地方。我沒有乘以投影矩陣,所以它超出了視口的最大深度 – Camander