鼠标拾取

背景

屏幕中选中一点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;

DirectX11-鼠标拾取相关推荐

  1. DirectX11进阶5_硬件实例化与视锥体裁剪及鼠标拾取交互

    一.硬件实例化(Hardware Instancing) 硬件实例化指的是在场景中绘制同一个物体多次,但是是以不同的位置.旋转.缩放.材质以及纹理来绘制(比如一棵树可能会被多次使用以构建出一片森林). ...

  2. Three.js - 鼠标拾取(射线追踪法)(十九)

    射线追踪法 射线追踪法是最常见的方法,因为three.js提供了Raycaster对象来实现它. 原理:从鼠标处发射一条射线,穿透场景的视椎体,通过计算,找出与射线相交的对象. Raycaster 属 ...

  3. 鼠标拾取(光线拾取)

    作者:桑榆 QQ:934440653 有问题,评论留言,或qq联系 案例效果 鼠标拾取 主要代码 1.创建矩形 (1)6-8行限制随机产生的矩形的长.宽.纵深不超过20: (2)14-16行限制随机产 ...

  4. OpenGL3.3鼠标拾取物体

    OpenGL3.3鼠标拾取物体 本文翻译自:http://www.lighthouse3d.com/tutorials/opengl-selection-tutorial/ 在3D场景中拾取或选择特定 ...

  5. Unity3D 入门小技巧——鼠标拾取并移动物体

    一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的Ra ...

  6. Chai 3D之鼠标拾取

    推荐:将  NSDT场景编辑器  加入你的3D开发工具链 介绍   鼠标拾取是一种常用的直观操作,用于与各种 3D 图形应用程序中的 3D 场景进行交互.CHAI3D 提供了一些基本功能来检测对象是否 ...

  7. Unity3D 类似COC的鼠标拾取游戏物体并在限定区域摆放

    using UnityEngine; using System.Collections;public class MoveObject : MonoBehaviour {/// <summary ...

  8. OpenGL鼠标拾取

    1.OpenGL自带拾取功能.glSelectBuffer等函数完成. 大每一本OpenGL入门的书都会讲到OpenGL的Select模式,它采用一种方法使得可以获取当前鼠标点选的几何图形.简单的来说 ...

  9. opengl 鼠标拾取

    代码 void GLWidget::HitGet(QPoint pos) { GLuint NameBuffer[27]; GLint viewport[4]; GLint hits; glGetIn ...

  10. PCL之鼠标拾取点云的三维坐标

    代码展示:  #include <string> #include <pcl/io/pcd_io.h> #include <pcl/point_cloud.h> # ...

最新文章

  1. BT656与BT1120那点事
  2. 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理
  3. DICOM文件格式与编程(转)
  4. mfc对话框ok没效果_摄影色调效果(冷色调与暧色调)
  5. SQL SERVER 用户自定义函数如何定义.
  6. 汉字的动态编码与显示方案
  7. Pycharm主题颜色设置
  8. 2022年工作室暑期培训
  9. 实用开发工具及框架概述
  10. SaaS是Software-as-a-Service(软件即服务)
  11. 深色背景黑底白字,蓝底白字课件材料“洗白”打印,ps批处理教程
  12. 判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
  13. 小米前端面经(社招)
  14. HDU 6148 Valley Numer(数位DP)
  15. 绘制logisitc回归的风险预测值的nomogram图
  16. jquery如何根据id获取标签内的值,以及如何通过id赋值,各种标签赋值取值汇总
  17. python --- 常见题目 2019.01.03
  18. oracle数据库事务日志已满,SQL Server中已满事务日志原因的检测(上)
  19. 《网络安全审查办法》将影响我们什么?
  20. Python中__dict__属性的详解(思维导图版)

热门文章

  1. 国外问卷调查做题工具
  2. 新手必看的模具设计十大分模法,干货满满!!!
  3. Mac OSX 升级python six模块版本
  4. 该怎么学好软件工程这门课?
  5. iview表格表头上添加icon图标
  6. __builtin_ffs 的使用方法
  7. centos安装MySQL到指定盘_Centos下安装mysql 和挂载硬盘
  8. mysql 高并发的解决方案
  9. 组装电脑千万不要随便买
  10. Pdf.js 解决电子印章问题(最新)