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;
DirectX11-鼠标拾取相关推荐
- DirectX11进阶5_硬件实例化与视锥体裁剪及鼠标拾取交互
一.硬件实例化(Hardware Instancing) 硬件实例化指的是在场景中绘制同一个物体多次,但是是以不同的位置.旋转.缩放.材质以及纹理来绘制(比如一棵树可能会被多次使用以构建出一片森林). ...
- Three.js - 鼠标拾取(射线追踪法)(十九)
射线追踪法 射线追踪法是最常见的方法,因为three.js提供了Raycaster对象来实现它. 原理:从鼠标处发射一条射线,穿透场景的视椎体,通过计算,找出与射线相交的对象. Raycaster 属 ...
- 鼠标拾取(光线拾取)
作者:桑榆 QQ:934440653 有问题,评论留言,或qq联系 案例效果 鼠标拾取 主要代码 1.创建矩形 (1)6-8行限制随机产生的矩形的长.宽.纵深不超过20: (2)14-16行限制随机产 ...
- OpenGL3.3鼠标拾取物体
OpenGL3.3鼠标拾取物体 本文翻译自:http://www.lighthouse3d.com/tutorials/opengl-selection-tutorial/ 在3D场景中拾取或选择特定 ...
- Unity3D 入门小技巧——鼠标拾取并移动物体
一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的Ra ...
- Chai 3D之鼠标拾取
推荐:将 NSDT场景编辑器 加入你的3D开发工具链 介绍 鼠标拾取是一种常用的直观操作,用于与各种 3D 图形应用程序中的 3D 场景进行交互.CHAI3D 提供了一些基本功能来检测对象是否 ...
- Unity3D 类似COC的鼠标拾取游戏物体并在限定区域摆放
using UnityEngine; using System.Collections;public class MoveObject : MonoBehaviour {/// <summary ...
- OpenGL鼠标拾取
1.OpenGL自带拾取功能.glSelectBuffer等函数完成. 大每一本OpenGL入门的书都会讲到OpenGL的Select模式,它采用一种方法使得可以获取当前鼠标点选的几何图形.简单的来说 ...
- opengl 鼠标拾取
代码 void GLWidget::HitGet(QPoint pos) { GLuint NameBuffer[27]; GLint viewport[4]; GLint hits; glGetIn ...
- PCL之鼠标拾取点云的三维坐标
代码展示: #include <string> #include <pcl/io/pcd_io.h> #include <pcl/point_cloud.h> # ...
最新文章
- BT656与BT1120那点事
- 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理
- DICOM文件格式与编程(转)
- mfc对话框ok没效果_摄影色调效果(冷色调与暧色调)
- SQL SERVER 用户自定义函数如何定义.
- 汉字的动态编码与显示方案
- Pycharm主题颜色设置
- 2022年工作室暑期培训
- 实用开发工具及框架概述
- SaaS是Software-as-a-Service(软件即服务)
- 深色背景黑底白字,蓝底白字课件材料“洗白”打印,ps批处理教程
- 判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
- 小米前端面经(社招)
- HDU 6148 Valley Numer(数位DP)
- 绘制logisitc回归的风险预测值的nomogram图
- jquery如何根据id获取标签内的值,以及如何通过id赋值,各种标签赋值取值汇总
- python --- 常见题目 2019.01.03
- oracle数据库事务日志已满,SQL Server中已满事务日志原因的检测(上)
- 《网络安全审查办法》将影响我们什么?
- Python中__dict__属性的详解(思维导图版)