今天在Unreal把MousePosition映射到NDC
(Editor Mode)
-1 < Xn < 1
-1 < Yn < 1
再從NDC映射到Camera的近平面上的點P時
Field of View = θ
ratio = screen width / screen height
scaleU = Xn * tan(θ/2) * ratio
scaleV = Yn * tan(θ/2)
P = CameraPos + CameraX
+ CameraY * scaleU
+ CameraZ * scaleV
(Unreal的Camera是X軸和近平面垂直)
發現不管怎麼結果都很奇怪
後來先把ratio拿掉
scaleU = Xn * tan(θ/2)
scaleV = Yn * tan(θ/2)
才看出Unreal和Unity處理NDC到P的做法是不一樣的
Unreal使用的是
scaleU = Xn * tan(θ/2)
scaleV = Yn * tan(θ/2) /ratio
假設 ratio = 2、θ = π/2 (90度)
當 Yn = 0.5, 有 scalueV = 1
Unity使用的是
scaleU = Xn * tan(θ/2) * ratio
scaleV = Yn * tan(θ/2)
假設 ratio = 2、θ = π/2 (90度)
當 Xn = 1, 有 scalueU = 2
這代表,在Unity裡
你把Screen Width拉長時
水平方向會看到更多的東西
而在Unreal裡
當你把Screen Width拉長時
水平方向看到的範圍不變
但垂直方向看到的東西會變少
乘下的2個Case
在Unity裡, 把Screen Height拉長時
在Unreal裡, 把Screen Height拉長時
沒有留言:
張貼留言