文件名称:世界/本地空间中的拾取射线-python实现pdf转换成word/txt纯文本文件
文件大小:5.52MB
文件格式:PDF
更新时间:2024-07-08 20:40:53
DX11 Direcx 图形学
图 16.4 由相似三角形可知 1 v vy y d ′ = 和 1 v vx x d ′ = 。 回忆一下,在投影矩阵中 00 1 = tan 2 r α P 和 11 1 = tan 2 α P 。我们可以将上述方程改写为: 00 11 2 1 / 2 1 / s v s v x x w y y h ′ = − ′ = − + P P 这样,我们可以引出一条穿过点(xvʹ , yvʹ ,1)的拾取射线,它与穿过点(xv , yv ,d)的拾取射 线是同一条射线。下面给出了在观察空间中计算拾取射线的代码: void PickingApp::pick(int sx, int sy) { XMMATRIX P = mCam.Proj(); // 在视空间中计算拾取射线 float vx = (+2.0f*sx/mClientWidth - 1.0f)/P(0,0); float vy = (-2.0f*sy/mClientHeight + 1.0f)/P(1,1); // 视空间中的射线定义 XMVECTOR rayOrigin = XMVectorSet(0.0f, 0.0f, 0.0f,1.0f); XMVECTOR rayDir = XMVectorSet (vx, vy, 1.0f,0.0f); 注意,该射线的起点是观察空间的原点,因为观察点位于观察空间的原点上。 16.2 世界/本地空间中的拾取射线 现在,我们已经知道了如何计算观察空间中的拾取射线,但是它的用途非常有限,因 324 / 351