如何解决Arkit Scene (Xamarin) 中 PanGesture 和对象翻译的问题
我是 Arkit 和 Xamarin 环境的新手。 我需要有关使用 PanGesture 在场景中转换 SCNNode 的帮助。 我已经使用本指南开始我的 PanGesture 方法。 Guide
在那之后......
我使用了帮助代码,但我注意到,如示例中所示,当我在场景中移动对象时,它仅沿 X、Y 轴移动。 简而言之,如果 ARkit 场景的笛卡尔轴被框起来,相机的 Z 指向观察者,一切正常。 如果相机位置发生变化(手机移动),我如何获得 3D 空间内的平移增量?
if (sender.State == UIGestureRecognizerState.Changed)
{
var translate = sender.TranslationInView(areaPanned);
// Only allow movement vertically or horizontally [OK,but how can i obtain the XYZ value of delta in scene from XY of Viewport?]
node.LocalTranslate(new SCNVector3((float)translate.X / 10000f,(float)-translate.Y / 10000,0.0f));
}
按照opengl标准我想到了这样的解决方案: [伪代码]
从 0...1 到 -1...1 坐标空间的缩放/偏移
var vS = new Coordinate(this.Scene.CurrentViewport.X,this.Scene.CurrentViewport.Y,1.0);
var vWH = new Coordinate(this.Scene.CurrentViewport.Width,this.Scene.CurrentViewport.Height,1.0);
var scrrenpos = new Coordinate(translate.X,-translate.Y,1.0);
var normalized = (scrrenpos - vS) / vWH;
之后我需要矩阵:
var inversePM = (projection * modelView).inverse
哪里:
=> ARCAmera.ProjectionMatrix 的投影
=> 来自 ARCamera.Transform 的模型视图
结束:
var result = normalized * inversePM;
如果我用这个值设置 SCNNode 位置没有任何作用:(
谢谢
解决方法
问题解决了! 这里 Swift code 在 c# 中翻译...工作正常!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。