在我的项目(C++/UE4)中,我有一个杠杆网格伸出地板。按住这个杠杆上的鼠标左键并移动鼠标,启动一个拖动操作。这种拖动操作负责计算2D增量鼠标的移动,并利用这些数据在局部空间*中旋转杠杆*,后者只能在单个轴上旋转(负或正,但仍然只有一个轴)。
但如果,我不是在操纵杆前面,而是我在后面呢?如果我站在它的一边呢?如果杠杆实际上是从墙上伸出而不是地面呢?我如何使它,使鼠标的移动实际上旋转杠杆适合的角度,从它是从,无论杠杆的方向?
为了进一步解释自己..。
下面是一个场景列表,以及我希望鼠标控制它们的方式:
当操纵杆在地板上,而你在它前面时,:
当操纵杆在地板上而你在它后面时,:
当操纵杆在地板上而你在它旁边时,:
当操纵杆在墙上而你在它前面时:
当杠杆在墙上,而你在它旁边:
如果有帮助的话,请注意,UE4确实有内置的2D/3D向量数学函数,以及在3D世界或2D屏幕上投影和解构坐标的简单方法。因此,我总是知道鼠标位置的精确的世界空间和屏幕空间坐标,杠杆的枢轴(底部)位置,杠杆的手柄(顶部)位置,以及鼠标移动每个帧的数量(增量)。
发布于 2016-06-28 08:38:00
获取杠杆的枢轴(围绕杠杆旋转的点),并将其投影到屏幕坐标。然后,当您第一次单击时,存储单击的坐标。
现在,当您需要知道以哪种方式旋转时,您需要计算向量枢轴到第一单击和向量枢轴到当前位置之间的点积(您应该在点积之前对矢量进行规范化)。这给你的cos(角度),鼠标移动,你可以使用它(取arccos(值)获得的角度),以移动杠杆在3d。因为屏幕上的角度与投影的角度不一样,所以它会有点不稳定,但是这样更容易控制(如果你移动鼠标90度,杠杆就会移动90度,即使它们不对齐)。播放设置,看看什么最适合您的项目。
另一种方法是这样做:当你第一次点击你存储的点,杠杆的末端(甚至更好的点,你点击杠杆)在3d空间。你可以使用摄像机投影平面来移动3d中的点(你可以使用相机向上矢量,在你使它与摄像机的视图方向正交之后,然后取视图方向的交叉向量来得到正确的方向)。将鼠标增量运动应用于点,然后将其投影到旋转平面中,并移动杠杆将点与投影点对齐(数学与上面的类似,只需使用3d点而不是屏幕投影)。
警告:如果相机离旋转平面很近,这并不是很好,因为它并不总是清楚的杠杆应该向前或向后移动。
我不是虚幻工程4方面的专家(只是自学),但所有这些都是基本的向量数学,应该得到很好的支持。查看维基百科上的点产品和交叉产品,因为它们对这类技巧非常有用。
发布于 2019-06-11 22:25:21
这里有一个方法:
scalarPosition。当scalarPosition在框架之间增加时,杠杆应该旋转,使其向杠杆的上部移动。当它在框架之间减小时,杠杆应该向杠杆的下边旋转。https://stackoverflow.com/questions/38067313
复制相似问题