世界空间到屏幕空间
世界空间到NDC空间
NDC空间和近剪裁面空间/w(归一化)
M又相似三角性质推到再转成矩阵形式
(在代码中M就是Project,XYZW是视口下的)
NDC到屏幕空间
屏幕空间到世界空间
\
屏幕空间转NDC空间
由NDC到屏幕空间的式子反求Xp得
NDC空间转近剪裁面空间
再去归一化:
近剪裁面空间转世界空间
先将近剪裁面空间 单位化(射线检测只要方向)
(由相似三角形的性质:近剪裁面的距离是d,先单位化成1)
(代码中的projectMaxtrix实现相对视口坐标到NDC的转化,即上述的M矩阵)
int H = FEngineRenderConfig::GetRenderConfig()->ScrrenHight;
int W = FEngineRenderConfig::GetRenderConfig()->ScrrenWidth;
fvector_2d View;
View.x = (2.f * ScreenX / W - 1.f) / InCamera->ProjectMatrix._11;
View.y = (-2.f * ScreenY / H + 1.f) / InCamera->ProjectMatrix._22;
//视口下的 原点 和 方向
XMVECTOR OriginPoint = XMVectorSet(0.f, 0.f, 0.f, 1.f);
XMVECTOR Direction = XMVectorSet(View.x, View.y, 1.f, 0.f);
AABB算法