c# - 如何解决 ARKitSample 项目的子节点快照问题?
问题描述
我已经从 - https://github.com/xamarin/ios-samples/blob/master/ios11/ARKitSample/ARKitSample/GameViewController.cs下载了 ARKitSample 项目
运行代码后,它按预期工作,直到我点击屏幕,调用手势识别事件并且它第一次工作正常 - 我得到一个带有屏幕快照的平面节点。但是当第二次调用时,不是在第二次点击的位置创建一个新节点,而是与初始子节点重叠。
该代码是此处 ARKit 主题演讲中原始 swift 版本的一个端口 - https://youtu.be/LLRweyZ1KpA?t=1380
private void HandleTap(UIGestureRecognizer gestureRecognize)
{
// Get current frame
var currentFrame = SceneView.Session.CurrentFrame;
if (currentFrame == null) return;
// Create an image plane using a snapshot of the view
var imagePlane = SCNPlane.Create(SceneView.Bounds.Width / 6000, SceneView.Bounds.Height / 6000);
imagePlane.FirstMaterial.Diffuse.Contents = SceneView.Snapshot();
imagePlane.FirstMaterial.LightingModelName = SCNLightingModel.Constant;
// Create a plane node and add it to the scene
var planeNode = SCNNode.FromGeometry(imagePlane);
SceneView.Scene.RootNode.AddChildNode(planeNode);
// Set transform of node to be 10cm in front of the camera
var translation = SCNMatrix4.CreateTranslation(0, 0, 0.1f);
var cameraTranslation = currentFrame.Camera.Transform.ToSCNMatrix4();
planeNode.Transform = SCNMatrix4.Mult(cameraTranslation, translation);
}
我在 iPhone XS 和 7 上试过这个,我错过了什么明显的东西吗?
解决方案
该示例为您更改了节点的变换。如果你想改变节点的位置,你可以试试下面的代码:
var tapLocation = gestureRecognize.LocationInView(SceneView);
var hitTestResults = SceneView.HitTest(tapLocation, ARHitTestResultType.EstimatedHorizontalPlane);
var hitTestResult = hitTestResults.FirstOrDefault();
if (hitTestResult == null) return;
var position = new SCNVector3(hitTestResult.WorldTransform.Column3.X, hitTestResult.WorldTransform.Column3.Y, hitTestResult.WorldTransform.Column3.Z);
planeNode.Position = position;
推荐阅读
- python-2.7 - 如何使用 python 和 rest API 调用将动态 VHD 上传到 Azure?
- scala - 数组列的火花聚合
- javascript - ajax响应显示为零
- python - Python 错误“线程 0x1 已以代码 0 (0x0) 退出。程序 'python.exe' 已以代码 0 (0x0) 退出。”
- javascript - 如何管理表格和javascript中的输入
- php - 如何在 php 的同一个复选框中插入和显示获取的值?
- php - 在 PHP 中使用 curl 从 URL 获取 HTML
- c# - Cake - 安装 dotnet core 工具
- python - 比较 2 个 CSV 文件中的列
- c# - 将json字符串转换为列表对象(json对象的索引号影响转换)