在 XNA 4.0 3D 中。我想拖放一个模型 3D。所以,我必须在模型中检查鼠标。我的问题是我不知道将这个模型从 3D 更改为 2D 的位置和评分。它与相机的矩阵视图和矩阵投影有关吗?这是我的代码: http ://www.mediafire.com/?3835txmw3amj7pe
问问题
53 次
1 回答
1
查看 msdn 上的这篇文章:使用鼠标选择对象。
从那篇文章:
MouseState mouseState = Mouse.GetState();
int mouseX = mouseState.X;
int mouseY = mouseState.Y;
Vector3 nearsource = new Vector3((float)mouseX, (float)mouseY, 0f);
Vector3 farsource = new Vector3((float)mouseX, (float)mouseY, 1f);
Matrix world = Matrix.CreateTranslation(0, 0, 0);
Vector3 nearPoint = GraphicsDevice.Viewport.Unproject(nearsource,
proj, view, world);
Vector3 farPoint = GraphicsDevice.Viewport.Unproject(farsource,
proj, view, world);
// Create a ray from the near clip plane to the far clip plane.
Vector3 direction = farPoint - nearPoint;
direction.Normalize();
Ray pickRay = new Ray(nearPoint, direction);
proj
并相应地使用您view
自己的投影和视图矩阵。
现在,当你有你的 时Ray
,你需要有一个BoundingBox
或一个BoundingSphere
(或多个)大致包含你的模型。
一个简单的解决BoundingSphere
方案ModelMesh
是使用Model.Meshes
.
foreach(ModelMesh mesh in model.Meshes)
{
if(Ray.Intersects(mesh.BoundingSphere))
{
//the mouse is over the model!
break;
}
}
由于BoundingSphere
每个ModelMesh
都将包含该网格中的所有顶点,因此如果网格不是大致圆形(即如果它很长) ,它可能不是网格的最精确表示。这意味着上面的代码可能会说鼠标与对象相交,而在视觉上它是远离的。
另一种方法是手动创建包围体。BoundingBox
您可以根据需要创建对象或对象的实例BoundingSphere
,并根据运行时要求手动更改它们的尺寸和位置。这需要更多的工作,但并不难。
于 2012-11-09T10:40:06.907 回答