XNA:我有一个1 * 1 * 1的盒子,想知道我从哪一侧单击它。 (《我的世界》克隆版)

| 我目前正在创建Minecraft克隆游戏(您在3D空间中并创建或删除块以创建结构的游戏) 因此,我几乎可以完成所有需要的工作。 如果我查看一个块,它将以我想要的方式显示出来,并且如果我用右键单击调用“ RemoveBlock()\”,则当前查看的块将被删除。 但是现在我也想通过单击leftclick添加块。 所以我有:AddBlock(Vector3 LookingAt,Vector3 Direction) \“ LookingAt \”与我存储我的Blockdata的3dArray正确相关。方向是Vector3.UnitX / Z / Y和负数。如果我手动说Direction = Vector3.UnitY,则将在LookedAt块上方添加一个块。这就是我想要的。 但是我怎么知道我从哪一侧看街区。即。确定方向: 我试图在LookedatBlock周围创建6个球体,并从CameraPossition绘制了一个Ray到CameraDirection,然后试图找出它与哪个球体首先碰撞。这6个精子的中心始终在立方体每一侧的中间,半径为0.5f。这对我来说很有意义。但这是行不通的。我该怎么做才能使它正常工作。 我需要的结果是某种Vector3.UnitX / Y / Z,以便我可以将其与其他方法一起使用。 谢谢。     
已邀请:
我想您可以通过检查X,Y和Z值并从多维数据集的原点向量中找到它们来确定单击的那一侧。 例如,假设一个100像素的多维数据集的左上角是带有(0,0,0)的Vector3(当然是相对于该多维数据集)。好吧,如果单击多维数据集的右下角,坐标将是(100,100,100),对吗? 使用该方法,您可以简单地尝试找到立方体上正方形的边界。例如,六个边将在以下向量之间: 边1:(0,0,0),(100,0,0),(0,0,100)和(100,0,100) 第2面:(0,100,0),(100,100,0),(0,100,100)和(100,100,100) 它们分别是立方体的顶部和底部,使用XYZ坐标系并选取一个起点。如果我弄乱了其中一个坐标,请原谅我,但它们应该是正确的。 因此,您可以通过简单地找到(确定,如果该边的值为(i,100,j)...)来确定在多维数据集上单击的位置,查明单击位置的Vector3以找出其所在的面。 )。 有没有道理?我假设当您单击多维数据集时,将返回一些Vector。 此外,添加调试工具以显示鼠标当前指向的向量等可能会有所帮助?     

要回复问题请先登录注册