private void OnARFrameUpdated(Frame arFrame) { var all = arCore.Session.GetAllTrackables( Java.Lang.Class.FromType( typeof(Com.Google.AR.Core.Plane))); foreach (Com.Google.AR.Core.Plane plane in all) { var node = FindNodeByPlaneId(plane.GetHashCode().ToString()); if (node == null) { node = new PlaneNode { PlaneId = plane.GetHashCode().ToString(), Name = $"plane{plane.GetHashCode()}" }; CreateSubPlane(node); scene.AddChild(node); } SetPositionAndRotation(plane, node); UpdateSubPlane(node, Vector3.Zero); } }
public override void ViewDidAppear(bool animated) { base.ViewDidAppear(animated); sceneView.Session.Run(new ARWorldTrackingConfiguration { AutoFocusEnabled = true, LightEstimationEnabled = true, PlaneDetection = ARPlaneDetection.Horizontal, WorldAlignment = ARWorldAlignment.Gravity }, ARSessionRunOptions.ResetTracking | ARSessionRunOptions.RemoveExistingAnchors); CubeNode cubeNode = new CubeNode(size, UIColor.Red); cubeNode.Position = new SCNVector3(0, 0, zPosition); SphereNode sphereNode = new SphereNode(size, UIColor.Yellow); sphereNode.Position = new SCNVector3(0.3f, 0, zPosition); TorusNode torusNode = new TorusNode(size / 2, size / 4, UIColor.Blue); torusNode.Position = new SCNVector3(0.6f, 0, zPosition); TubeNode tubeNode = new TubeNode(size / 2, size / 2, size * 2, UIColor.Orange); tubeNode.Position = new SCNVector3(0.9f, 0, zPosition); ConeNode coneNode = new ConeNode(0.0001f, size / 2, size * 2, UIColor.Green); coneNode.Position = new SCNVector3(0, -0.3f, zPosition); CylinderNode cylinderNode = new CylinderNode(size, size * 2, UIColor.Cyan); cylinderNode.Position = new SCNVector3(0.3f, -0.3f, zPosition); PyramidNode pyramidNode = new PyramidNode(size * 2, size * 2, size * 2, UIColor.Brown); pyramidNode.Position = new SCNVector3(0.6f, -0.3f, zPosition); PlaneNode planeNode = new PlaneNode(size, size, UIColor.Purple); planeNode.Position = new SCNVector3(0.9f, -0.3f, zPosition); TextNode textNode = new TextNode("Hello from ARKit", 0.01f, UIColor.Orange); textNode.Position = new SCNVector3(0, -0.85f, zPosition); sceneView.Scene.RootNode.AddChildNode(cubeNode); sceneView.Scene.RootNode.AddChildNode(sphereNode); sceneView.Scene.RootNode.AddChildNode(torusNode); sceneView.Scene.RootNode.AddChildNode(tubeNode); sceneView.Scene.RootNode.AddChildNode(coneNode); sceneView.Scene.RootNode.AddChildNode(cylinderNode); sceneView.Scene.RootNode.AddChildNode(pyramidNode); sceneView.Scene.RootNode.AddChildNode(planeNode); sceneView.Scene.RootNode.AddChildNode(textNode); }
public override void DidAddNode(ISCNSceneRenderer renderer, SCNNode node, ARAnchor anchor) { if (anchor is ARPlaneAnchor planeAnchor) { var planeNode = new PlaneNode(planeAnchor); node.AddChildNode(planeNode); this.planeNodes.Add(anchor.Identifier, planeNode); } }
private void SetPositionAndRotation(ARPlaneAnchor anchor, PlaneNode node) { arkitComponent.ApplyOpenTkTransform(node, anchor.Transform, true); node.ExtentX = anchor.Extent.X; node.ExtentZ = anchor.Extent.Z; var position = new Vector3(anchor.Center.X, anchor.Center.Y, -anchor.Center.Z); UpdateSubPlane(node, position); }
private void SetPositionAndRotation(Com.Google.AR.Core.Plane plane, PlaneNode node) { node.ExtentX = plane.ExtentX; node.ExtentZ = plane.ExtentZ; node.Rotation = new Quaternion(plane.CenterPose.Qx(), plane.CenterPose.Qy(), plane.CenterPose.Qz(), -plane.CenterPose.Qw()); node.Position = new Vector3(plane.CenterPose.Tx(), plane.CenterPose.Ty(), -plane.CenterPose.Tz()); }
public override void DidAddNode(ISCNSceneRenderer renderer, SCNNode node, ARAnchor anchor) { if (anchor is ARImageAnchor imageAnchor) { ARReferenceImage image = imageAnchor.ReferenceImage; nfloat width = image.PhysicalSize.Width; nfloat height = image.PhysicalSize.Height; PlaneNode planeNode = new PlaneNode(width, height, new SCNVector3(0, 0, 0), UIColor.Red); float angle = (float)(-Math.PI / 2); planeNode.EulerAngles = new SCNVector3(angle, 0, 0); node.AddChildNode(planeNode); } }
private void UpdateOrAddPlaneNode(ARPlaneAnchor anchor) { var node = FindNodeByPlaneId(anchor.Identifier.ToString()); if (node == null) { node = new PlaneNode() { PlaneId = anchor.Identifier.ToString(), Name = $"plane{anchor.GetHashCode()}" }; CreateSubPlane(node); scene.AddChild(node); } SetPositionAndRotation(anchor, node); }
private SceneNodeBase GetRootNode() { var group = new GroupNode(); var sphere = new Sphere(1, 40, 80); var filename = "sphere.obj_"; sphere.DumpObjFile(filename, "sphere"); var parser = new ObjVNFParser(false); ObjVNFResult result = parser.Parse(filename); if (result.Error != null) { Console.WriteLine("Error: {0}", result.Error); } else { ObjVNFMesh mesh = result.Mesh; var model = new ObjVNF(mesh); model.DumpObjFile("vnf" + filename, "sphere"); var sphereNode = ObjVNFNode.Create(mesh); (new FormPropertyGrid(sphereNode)).Show(); group.Children.Add(sphereNode); { var planeNode = PlaneNode.Create(); planeNode.Color = new vec4(1, 1, 1, 1); planeNode.WorldPosition = new vec3(0, 1, 0); planeNode.Scale = new vec3(1, 1, 1) * 0.5f; sphereNode.Children.Add(planeNode); } { var axisNode = AxisNode.Create(); axisNode.WorldPosition = new vec3(0, 1, 0); axisNode.Scale = new vec3(1, 1, 1) * 0.5f; sphereNode.Children.Add(axisNode); } } return(group); }