@版權聲明:本文版權歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出,
本文鏈接[[簡書 - 寫文章 (jianshu.com)](坐標系變換 - 簡書 (jianshu.com))]([簡書 - 寫文章 (jianshu.com)](坐標系變換 - 簡書 (jianshu.com)))
如有問題, 可郵件(yumxuanyi@qq.com)咨詢。
關鍵字:OpenCASCADE
屏幕坐標系:以像素為單位 原點位于左上角,從左到右為X正方向,從上到下為Y正方向

A表示從屏幕坐標系 (原點在左上角 x正向向右 y正向向下)
到 屏幕坐標系,(原點在中心 x正向向右 y正向向上)
A矩陣的意義:1. 將原坐標系中點 經(jīng)過矩陣運算 得到一個新的點,這個點還是位于原坐標系中
2. 構造了一個新的坐標系,新的坐標系中的點,在原坐標系中的位置點。
而我們要的是,原坐標系中的點,在新坐標系中的位置。所以可以對A求逆。
Nw矩陣表示NDC-到窗口坐標系
W_N矩陣表示窗口到NDC坐標系
所以從像素坐標系到NDC坐標系
所以從NDC坐標系到像素坐標系
當給定窗口像素點的坐標(Px,Py),求NDC坐標位置
OpenCascade中,查看V3d_View中代碼
ndc中的點(xn,yn,zn) 窗口中的點(xp,yp)
convert(IXP,IYP,RXV,RYV) 中
xn = xp*2/w - 1.0
yn = (h-yp) * 2 / h - 1.0
convert(RXv, RYv,IXp,IYp) 中
xp = (xn + 1)* W / 2;
yp = H - H(yn+1)/2.0
以上變換滿足上面的矩陣推導結果
而
convert(IPX,IPY,Rx,RY,RZ )
xn = 2 * xp / w -1.0;
yn = 2 * (h-1-yp)/w - 1.0;
zn = 2.0 * 0.0 - 1.0;
convert(Rx,RY,RZ ,IPX,IPY)
xp = (xn + 1.0)* W / 2;
yp = H -1 - H(yn+1.0)/2.0
中卻不同,不同的原因是變換之前 窗口多了一個偏移量
相當于對于窗口像素坐標加了一個偏移量
變換后 再變換到NDC空間
xp = xp
yp = yp+1