在Directx11中选择点
Select Points in Directx11
我使用DirectX11和DXUT来显示点云,现在要使用鼠标移动交互选择点。特别是当我拖动鼠标绘制一个矩形时,这个矩形中的点将被选中。我的方法是首先将鼠标位置转换为一个方框,范围(-1,1)。然后用mvp矩阵将这些点变换到投影空间。最后,将这些点的x和y与方框进行比较。如果在方框中,则选中该点。以下是我的一些代码片段:
CModelViewerCamera g_Camera;
XMMATRIX mView = g_Camera.GetViewMatrix();
XMMATRIX mProj = g_Camera.GetProjMatrix();
XMMATRIX mvp= mWorld * mView * mProj;
XMFLOAT4 p_ext( p.x,p.y,p.z, 1 );
XMVECTOR tmp_p = XMLoadFloat4(&p_ext);
tmp_p = XMVector4Transform( tmp_p, XMMatrixTranspose(mvp) );
XMStoreFloat4( &p_ext, tmp_p );
float x = p_ext.x;
float y = p_ext.y;
if ( x > bottom_left.x && x < up_right.x &&
y > bottom_left.y && y < up_right.y )
{
//In box, Mark using other color
}
然而,当我运行我的代码时,我发现转换到投影空间的点不在范围(-1,1)内。谁能指出我的错误,或者给我另一种实现目标的方法。谢谢你!
假定mvp
矩阵按此顺序应用模型变换、视图变换和投影变换。对于mvp
矩阵,它需要这样计算:
mvp = mProj * mView * mWorld
第二,为什么你要转置矩阵mvp
?DirectX
使用行主要矩阵,XMMatrix
也是行主要的,所以不应该有理由转置mvp
矩阵。
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 在运行时选择父类的实现
- 数数并选择 sqlite 中的前三名
- 列表视图更改选择颜色