我在SceneKit中设置了一个场景,并发出了一个命中测试来选择一个项目.但是,我希望能够在场景中沿着平面移动该项目.我继续接收鼠标拖动事件,但不知道如何将这些2D坐标转换为场景中的3D坐标.
我的情况很简单.摄像机位于0,0,50并指向0,0,0.我只想沿z平面拖动我的对象,其z值为0.
命中测试就像魅力一样,但是如何将拖动事件中的鼠标点转换为我拖动的3D对象的场景中的新位置?
我正在研究一些 SceneKit 概念,而我试图在脑海中巩固的一个概念是 unprojectPoint。
我知道该函数将在 2D 中取一个点并在 3D 中返回一个点(所以一个具有正确 Z 值的点)。
当我阅读文档时,我读到了这个:
/*!
@method unprojectPoint
@abstract Unprojects a screenspace 2D point with depth info using the receiver's current point of view and viewport.
@param point The screenspace position to be unprojected.
@discussion A point whose z component is 0 (resp. 1) is unprojected on the near (resp. far) clip plane.
*/
public func unprojectPoint(_ point: SCNVector3) -> SCNVector3
Run Code Online (Sandbox Code Playgroud)
我不太清楚的是在谈论 Z 时使用的值 0 和 1 ....
z 分量为 0(分别为 1)的点在近(分别为远)剪裁平面上未投影。
当我在网上阅读时,我发现了这个问题: …