DirectX11-鼠标拾取

鼠标拾取

背景

屏幕中选中一点P(x,y),需要计算在三维场景中选中了那个物体或者说哪些物体。

方法

此时需要计算点P(x,y) 对应三维空间中的哪个点,或者哪些点。(此时注意,屏幕空间中的点也有z值,一般我们设置为z = 0,比如P(x,y,0) ,映射到世界坐标系中的点将在近平面上。z 值不同,将会映射到三维空间中的不同的点*(x,y,z)* 都可能不相同,不仅仅是z值。
具体映射方法也很简单,就是从视口逆变换->投影逆变换->观察逆变换,将屏幕中的点P(x,y,z) 投射到三维空间中,得到P’(x,y,z),然后P’ 和相机的位置C 形成射线CP’,该射线将会和物体进行碰撞检测。从而判断选中了哪些物体。具体的计算过程可参考D3D教程-鼠标拾取
在此补充:逆向变换的计算,DirectXMath 提供了现有的接口

XMVECTOR XM_CALLCONV XMVector3Unproject(
  [in] FXMVECTOR V,
  [in] float     ViewportX,
  [in] float     ViewportY,
  [in] float     ViewportWidth,
  [in] float     ViewportHeight,
  [in] float     ViewportMinZ,
  [in] float     ViewportMaxZ,
  [in] FXMMATRIX Projection,
  [in] CXMMATRIX View,
  [in] CXMMATRIX World
) noexcept;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhh-cy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值