投影矩阵

投影矩阵将空间任意一点Q投射到近平面上P,并 Px = [-1,1],Py = [-1,1],Pz = [-1,1],相机为空间原点
其中:n 近平面,f 远平面,l左平面,r右平面,t顶平面,b底平面,fovy纵向视野角度 aspect视口宽度/高度

1:根据三角几何学 Qx/n = Px/Pz
所以矩阵可以为
MatA
1 0 0 0
0 1 0 0
0 0 1 0
0 0 1/n 0

2:将x,y转换到[-1,1]
MatB:
1 0 0 -(l+r)/2
0 1 0 -(t+b)/2
0 0 1 -(f+n)/2
0 0 0 1
MatC:
2/(r-l) 0 0 0
0 2/(t-b) 0 0
0 0 2/(f-n) 0
0 0 0 1
/
ProjectionMat4:
MatC * MatB * MatA
2/(r - l) 0 -(r+l)/(n*(r-l) 0
0 2/(t-b) -(t+b)/(n*(t-b)) 0
0 0 j k
0 0 1/n 1

令z[-1,1]
当Qz = n时 Pz = -1
(jn + k)/n = -1
(j
f + k)/n = 1
k=2fn/(n-f)
j=-(n+f)/(n-f)

令 l = -r,t = -b , l = -r;
ProjectionMat4:
n/r 0 0 0
0 n/t 0 0
0 0 -(n+f)/(n-f) 2f
n/(n-f)
0 0 1 0

令 t = n * tan(fovy/2),r = aspect * t =aspect * n * tan(fovy/2)
最终ProjectionMat4:
1/aspect/tan(fovy/2) 0 0 0
0 1/tan(fovy/2) 0 0
0 0 -(n+f)/(n-f) 2f*n/(n-f)
0 0 1 0

实现代码


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值