Browse Source

changes in lab

Furkan Karakocaoglu 3 years ago
commit
12037fc648
100 changed files with 4353 additions and 0 deletions
  1. 2 0
      README.md
  2. 73 0
      citymodell/.gitignore
  3. 6 0
      citymodell/.vsconfig
  4. 10 0
      citymodell/Assets/GoogleARCore.meta
  5. 9 0
      citymodell/Assets/GoogleARCore/Configurations.meta
  6. 16 0
      citymodell/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset
  7. 10 0
      citymodell/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset.meta
  8. 10 0
      citymodell/Assets/GoogleARCore/Examples.meta
  9. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision.meta
  10. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials.meta
  11. 74 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackground.shader
  12. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackground.shader.meta
  13. 76 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackgroundMaterial.mat
  14. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackgroundMaterial.mat.meta
  15. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins.meta
  16. BIN
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/libarcore_camera_utility.so
  17. 95 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/libarcore_camera_utility.so.meta
  18. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src.meta
  19. 32 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/README.md
  20. 9 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/README.md.meta
  21. BIN
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/arcore_camera_utility.zip
  22. 9 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/arcore_camera_utility.zip.meta
  23. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes.meta
  24. 202 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity
  25. 9 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity.meta
  26. 10 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts.meta
  27. 221 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs
  28. 13 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs.meta
  29. 114 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs
  30. 13 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs.meta
  31. 214 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs
  32. 13 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs.meta
  33. 130 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs
  34. 13 0
      citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs.meta
  35. 9 0
      citymodell/Assets/GoogleARCore/Prefabs.meta
  36. 150 0
      citymodell/Assets/GoogleARCore/Prefabs/ARCore Device.prefab
  37. 10 0
      citymodell/Assets/GoogleARCore/Prefabs/ARCore Device.prefab.meta
  38. 53 0
      citymodell/Assets/GoogleARCore/Prefabs/Environmental Light.prefab
  39. 10 0
      citymodell/Assets/GoogleARCore/Prefabs/Environmental Light.prefab.meta
  40. 10 0
      citymodell/Assets/GoogleARCore/SDK.meta
  41. 10 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview.meta
  42. 10 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins.meta
  43. 10 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64.meta
  44. BIN
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_shared.dll
  45. 95 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_shared.dll.meta
  46. 101 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle.meta
  47. 8 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents.meta
  48. 8 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS.meta
  49. BIN
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/instant_preview_unity_plugin
  50. 9 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/instant_preview_unity_plugin.meta
  51. BIN
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/libinstant_preview_shared.dylib
  52. 9 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/libinstant_preview_shared.dylib.meta
  53. BIN
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.dll
  54. 95 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.dll.meta
  55. 10 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts.meta
  56. 186 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs
  57. 13 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs.meta
  58. 470 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs
  59. 13 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs.meta
  60. 46 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewTrackedPoseDriver.cs
  61. 13 0
      citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewTrackedPoseDriver.cs.meta
  62. 9 0
      citymodell/Assets/GoogleARCore/SDK/Materials.meta
  63. 76 0
      citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.mat
  64. 9 0
      citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.mat.meta
  65. 117 0
      citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.shader
  66. 10 0
      citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.shader.meta
  67. 10 0
      citymodell/Assets/GoogleARCore/SDK/Plugins.meta
  68. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar
  69. 31 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar.meta
  70. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar
  71. 32 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar.meta
  72. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar
  73. 31 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar.meta
  74. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/libarcore_unity_api.so
  75. 103 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/libarcore_unity_api.so.meta
  76. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/libarpresto_api.so
  77. 95 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/libarpresto_api.so.meta
  78. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar
  79. 31 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar.meta
  80. BIN
      citymodell/Assets/GoogleARCore/SDK/Plugins/unitygar.aar
  81. 31 0
      citymodell/Assets/GoogleARCore/SDK/Plugins/unitygar.aar.meta
  82. 10 0
      citymodell/Assets/GoogleARCore/SDK/Scripts.meta
  83. 109 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs
  84. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs.meta
  85. 69 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs
  86. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs.meta
  87. 51 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs
  88. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs.meta
  89. 141 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Anchor.cs
  90. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Anchor.cs.meta
  91. 181 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs
  92. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs.meta
  93. 76 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsRequestResult.cs
  94. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsRequestResult.cs.meta
  95. 10 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api.meta
  96. 124 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api/AnchorApi.cs
  97. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api/AnchorApi.cs.meta
  98. 55 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallStatusExtensions.cs
  99. 13 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallStatusExtensions.cs.meta
  100. 37 0
      citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallationStatus.cs

+ 2 - 0
README.md

@@ -0,0 +1,2 @@
+# Bachelor-Thesis
+

+ 73 - 0
citymodell/.gitignore

@@ -0,0 +1,73 @@
+# This .gitignore file should be placed at the root of your Unity project directory
+#
+# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
+#
+/[Ll]ibrary/
+/[Tt]emp/
+/[Oo]bj/
+/[Bb]uild/
+/[Bb]uilds/
+/[Ll]ogs/
+/[Uu]ser[Ss]ettings/
+
+# MemoryCaptures can get excessive in size.
+# They also could contain extremely sensitive data
+/[Mm]emoryCaptures/
+
+# Asset meta data should only be ignored when the corresponding asset is also ignored
+!/[Aa]ssets/**/*.meta
+
+# Uncomment this line if you wish to ignore the asset store tools plugin
+# /[Aa]ssets/AssetStoreTools*
+
+# Autogenerated Jetbrains Rider plugin
+/[Aa]ssets/Plugins/Editor/JetBrains*
+
+# Visual Studio cache directory
+.vs/
+
+# Gradle cache directory
+.gradle/
+
+# Autogenerated VS/MD/Consulo solution and project files
+ExportedObj/
+.consulo/
+*.csproj
+*.unityproj
+*.sln
+*.suo
+*.tmp
+*.user
+*.userprefs
+*.pidb
+*.booproj
+*.svd
+*.pdb
+*.mdb
+*.opendb
+*.VC.db
+
+# Unity3D generated meta files
+*.pidb.meta
+*.pdb.meta
+*.mdb.meta
+
+# Unity3D generated file on crash reports
+sysinfo.txt
+
+# Builds
+*.apk
+*.aab
+*.unitypackage
+
+# Crashlytics generated file
+crashlytics-build.properties
+
+# Packed Addressables
+/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
+
+# Temporary auto-generated Android Assets
+/[Aa]ssets/[Ss]treamingAssets/aa.meta
+/[Aa]ssets/[Ss]treamingAssets/aa/*
+/.vscode
+/Assets/CSVInput

+ 6 - 0
citymodell/.vsconfig

@@ -0,0 +1,6 @@
+{
+  "version": "1.0",
+  "components": [ 
+    "Microsoft.VisualStudio.Workload.ManagedGame"
+  ]
+} 

+ 10 - 0
citymodell/Assets/GoogleARCore.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 74e4fcdb05c15f743842e3280864e8b1
+folderAsset: yes
+timeCreated: 1505872011
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
citymodell/Assets/GoogleARCore/Configurations.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6b1cded3497844b35a3bfac966b428f2
+folderAsset: yes
+timeCreated: 1496364746
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
citymodell/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset

@@ -0,0 +1,16 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 53ac32fab2599402fb6d154adf4c1e40, type: 3}
+  m_Name: DefaultSessionConfig
+  m_EditorClassIdentifier: 
+  m_matchCameraFramerate: 1
+  m_enablePlaneFinding: 1
+  m_enableLightEstimation: 1

+ 10 - 0
citymodell/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9586a84d6c32f46b6ab7aeb6042f160d
+timeCreated: 1510878073
+licenseType: Pro
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 165068a6255814b639ac5e322836d8bb
+folderAsset: yes
+timeCreated: 1512499966
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7af44c1128a614f72a62d613e2c5b61d
+folderAsset: yes
+timeCreated: 1512755870
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: bec192a39069f44f8ae625bd826b4e53
+folderAsset: yes
+timeCreated: 1501723767
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 74 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackground.shader

@@ -0,0 +1,74 @@
+Shader "AREdgeDetectionBackground"
+{
+	Properties
+	{
+        _OverlayPercentage ("Overlay Percentage", Range (0.0, 1.0)) = 0.5
+	}
+
+	// For GLES3
+	SubShader
+	{
+		Pass
+		{
+			ZWrite Off
+
+			GLSLPROGRAM
+
+			#pragma only_renderers gles3
+
+			#ifdef SHADER_API_GLES3
+			#extension GL_OES_EGL_image_external_essl3 : require
+			#endif
+
+			uniform vec4 _UvTopLeftRight;
+			uniform vec4 _UvBottomLeftRight;
+
+			#ifdef VERTEX
+
+			#define kPortrait 1.0
+			#define kPortraitUpsideDown 2.0
+			#define kLandscapeLeft 3.0
+			#define kLandscapeRight 4.0
+
+			varying vec2 textureCoord;
+
+			void main()
+			{
+				#ifdef SHADER_API_GLES3
+				vec2 uvTop = mix(_UvTopLeftRight.xy, _UvTopLeftRight.zw, gl_MultiTexCoord0.x);
+				vec2 uvBottom = mix(_UvBottomLeftRight.xy, _UvBottomLeftRight.zw, gl_MultiTexCoord0.x);
+				textureCoord = mix(uvTop, uvBottom, gl_MultiTexCoord0.y);
+
+				gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+				#endif
+			}
+
+			#endif
+
+			#ifdef FRAGMENT
+			varying vec2 textureCoord;
+			uniform samplerExternalOES _MainTex;
+			uniform sampler2D _ImageTex;
+            uniform float _OverlayPercentage;
+
+			void main()
+			{
+				#ifdef SHADER_API_GLES3
+				if (textureCoord.x < _OverlayPercentage)
+					gl_FragColor = texture(_MainTex, textureCoord);
+				else
+				{
+					vec4 color = texture2D(_ImageTex, textureCoord);
+					gl_FragColor.xyz = color.xxx;
+				}
+				#endif
+			}
+
+			#endif
+
+			ENDGLSL
+		}
+	}
+
+	FallBack Off
+}

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackground.shader.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b7004efaaedb14dfcba62eea5c70c9d2
+timeCreated: 1512500068
+licenseType: Pro
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 76 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackgroundMaterial.mat

@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_Name: AREdgeDetectionBackgroundMaterial
+  m_Shader: {fileID: 4800000, guid: b7004efaaedb14dfcba62eea5c70c9d2, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Materials/AREdgeDetectionBackgroundMaterial.mat.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 44aa46aeaaf4d46a79e18f3e2da31ccc
+timeCreated: 1512581681
+licenseType: Pro
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5c8e17f48a997417eac4ae975493b6a1
+folderAsset: yes
+timeCreated: 1511980390
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/libarcore_camera_utility.so


+ 95 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/libarcore_camera_utility.so.meta

@@ -0,0 +1,95 @@
+fileFormatVersion: 2
+guid: f10dd41e5f6ea4c76829088acdb03eb3
+timeCreated: 1512072454
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 0
+        Exclude Editor: 1
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 88691640f915f42f6937d8d0122d69bd
+folderAsset: yes
+timeCreated: 1513277705
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 32 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/README.md

@@ -0,0 +1,32 @@
+Google ARCore Camera Utility Plugin Source Code
+================================================
+Copyright (c) 2017 Google Inc.  All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+## Overview
+The arcore_camera_unity.zip file contains source code of the libarcore_camera_utility.so 
+C library. This library is used to create the Unity plugin for reading image pixels from 
+ARCore GPU texture.
+
+## Files Included
+- include/camera_utility.h : header file of the C API interface.
+- include/gl_utility.h : header file of GL utility functions.
+- include/texture_reader.h : header file of C++ API interface.
+- src/camera_utility.cc : implementation of the C API.
+- src/gl_utility.cc : implementation of GL utility functions.
+- src/texture_reader.cc : implementation of C++ API.
+
+## How to Build
+You can build the library by using Google Android NDK(https://developer.android.com/ndk/index.html). 
+Google Android NDK can be downloaded from this URL(https://developer.android.com/ndk/downloads/index.html).

+ 9 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/README.md.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fe5fc815b621d4801ac251a35d054ac1
+timeCreated: 1513277715
+licenseType: Pro
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/arcore_camera_utility.zip


+ 9 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Plugins/src/arcore_camera_utility.zip.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 218bec0cf31a949a18e480486444ca54
+timeCreated: 1513277705
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ed63ed01b7e4c427d8d897825c5ed5dd
+folderAsset: yes
+timeCreated: 1501206008
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 202 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity

@@ -0,0 +1,202 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 8
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0.37311947, g: 0.38074005, b: 0.35872722, a: 1}
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 11
+  m_GIWorkflowMode: 0
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 1
+  m_LightmapEditorSettings:
+    serializedVersion: 9
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+  m_LightingDataAsset: {fileID: 0}
+  m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1001 &60865845
+Prefab:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 4892153982037908, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 114923820857209294, guid: c10877f7cd5764de18d46d7b777d1faa,
+        type: 2}
+      propertyPath: BackgroundMaterial
+      value: 
+      objectReference: {fileID: 2100000, guid: 44aa46aeaaf4d46a79e18f3e2da31ccc, type: 2}
+    - target: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+        type: 2}
+      propertyPath: BackgroundMaterial
+      value: 
+      objectReference: {fileID: 2100000, guid: 44aa46aeaaf4d46a79e18f3e2da31ccc, type: 2}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+  m_IsPrefabParent: 0
+--- !u!114 &517579873 stripped
+MonoBehaviour:
+  m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+    type: 2}
+  m_PrefabInternal: {fileID: 60865845}
+  m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
+--- !u!1 &1465104021
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 1465104022}
+  - component: {fileID: 1465104023}
+  - component: {fileID: 1465104024}
+  m_Layer: 0
+  m_Name: ComputerVisionController
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1465104022
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1465104021}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1465104023
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1465104021}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0471ee42f4eac4098805c8b4aae4875c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  TextureReaderComponent: {fileID: 1465104024}
+  BackgroundRenderer: {fileID: 517579873}
+--- !u!114 &1465104024
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1465104021}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b8ba03f2a23f74384ac6625e269b5f50, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  ImageWidth: 1024
+  ImageHeight: 512
+  ImageSampleMode: 1
+  ImageFormat: 1

+ 9 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5ef0f7f7f2c7b4285b707265348bbffd
+timeCreated: 1512755571
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 02f1f705271f6408cb81efb900b3b2bb
+folderAsset: yes
+timeCreated: 1501723747
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 221 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs

@@ -0,0 +1,221 @@
+//-----------------------------------------------------------------------
+// <copyright file="ComputerVisionController.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore.TextureReader
+{
+    using System;
+    using System.Collections.Generic;
+    using GoogleARCore;
+    using UnityEngine;
+    using UnityEngine.Rendering;
+
+    /// <summary>
+    /// Controlls the ComputerVision example.
+    /// </summary>
+    public class ComputerVisionController : MonoBehaviour
+    {
+        /// <summary>
+        /// The TextureReader component instance.
+        /// </summary>
+        public TextureReader TextureReaderComponent;
+
+        /// <summary>
+        /// Background renderer to inject our texture into.
+        /// </summary>
+        public ARCoreBackgroundRenderer BackgroundRenderer;
+
+        /// <summary>
+        /// True if the app is in the process of quitting due to an ARCore connection error, otherwise false.
+        /// </summary>
+        private bool m_IsQuitting = false;
+
+        /// <summary>
+        /// Texture created from filtered camera image.
+        /// </summary>
+        private Texture2D m_TextureToRender = null;
+        private int m_ImageWidth = 0;
+        private int m_ImageHeight = 0;
+        private byte[] m_EdgeImage = null;
+        private float m_SwipeMomentum = 0.0f;
+
+        /// <summary>
+        /// Start is called on the frame when a script is enabled just before
+        /// any of the Update methods is called the first time.
+        /// </summary>
+        public void Start()
+        {
+            // Registers the TextureReader callback.
+            TextureReaderComponent.OnImageAvailableCallback += OnImageAvailable;
+            Screen.sleepTimeout = SleepTimeout.NeverSleep;
+        }
+
+        /// <summary>
+        /// The Unity Update() method.
+        /// </summary>
+        public void Update()
+        {
+            if (Input.GetKey(KeyCode.Escape))
+            {
+                Application.Quit();
+            }
+
+            _QuitOnConnectionErrors();
+            _HandleTouchInput();
+        }
+
+        /// <summary>
+        /// TextureReader callback handler.
+        /// </summary>
+        /// <param name="format">The format of the image.</param>
+        /// <param name="width">Width of the image, in pixels.</param>
+        /// <param name="height">Height of the image, in pixels.</param>
+        /// <param name="pixelBuffer">Pointer to raw image buffer.</param>
+        /// <param name="bufferSize">The size of the image buffer, in bytes.</param>
+        public void OnImageAvailable(TextureReaderApi.ImageFormatType format, int width, int height, IntPtr pixelBuffer, int bufferSize)
+        {
+            if (format != TextureReaderApi.ImageFormatType.ImageFormatGrayscale)
+            {
+                Debug.Log("No edge detected due to incorrect image format.");
+                return;
+            }
+
+            if (m_TextureToRender == null || m_EdgeImage == null || m_ImageWidth != width || m_ImageHeight != height)
+            {
+                m_TextureToRender = new Texture2D(width, height, TextureFormat.R8, false, false);
+                m_EdgeImage = new byte[width * height];
+                m_ImageWidth = width;
+                m_ImageHeight = height;
+            }
+
+            // Detect edges within the image.
+            if (EdgeDetector.Detect(m_EdgeImage, pixelBuffer, width, height))
+            {
+                // Update the rendering texture with the edge image.
+                m_TextureToRender.LoadRawTextureData(m_EdgeImage);
+                m_TextureToRender.Apply();
+                BackgroundRenderer.BackgroundMaterial.SetTexture("_ImageTex", m_TextureToRender);
+            }
+        }
+
+        /// <summary>
+        /// Show an Android toast message.
+        /// </summary>
+        /// <param name="message">Message string to show in the toast.</param>
+        private static void _ShowAndroidToastMessage(string message)
+        {
+            AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+            AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
+
+            if (unityActivity != null)
+            {
+                AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast");
+                unityActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
+                {
+                    AndroidJavaObject toastObject = toastClass.CallStatic<AndroidJavaObject>("makeText", unityActivity,
+                        message, 0);
+                    toastObject.Call("show");
+                }));
+            }
+        }
+
+        /// <summary>
+        /// Handles detecting touch input to control the edge detection effect.
+        /// </summary>
+        private void _HandleTouchInput()
+        {
+            const float SWIPE_SCALING_FACTOR = 1.15f;
+            const float INTERTIAL_CANCELING_FACTOR = 2.0f;
+            const float MINIMUM_MOMENTUM = .01f;
+
+            if (Input.touchCount == 0)
+            {
+                m_SwipeMomentum /= INTERTIAL_CANCELING_FACTOR;
+            }
+            else
+            {
+                m_SwipeMomentum = _GetTouchDelta();
+                m_SwipeMomentum *= SWIPE_SCALING_FACTOR;
+            }
+
+            if (Mathf.Abs(m_SwipeMomentum) < MINIMUM_MOMENTUM)
+            {
+                m_SwipeMomentum = 0;
+            }
+
+            var overlayPercentage = BackgroundRenderer.BackgroundMaterial.GetFloat("_OverlayPercentage");
+            overlayPercentage -= m_SwipeMomentum;
+            BackgroundRenderer.BackgroundMaterial.SetFloat("_OverlayPercentage", Mathf.Clamp(overlayPercentage, 0.0f, 1.0f));
+        }
+
+        /// <summary>
+        /// Gets the delta touch as a percentage of the screen.
+        /// </summary>
+        /// <returns>The delta touch as a percentage of the screen.</returns>
+        private float _GetTouchDelta()
+        {
+            switch (Screen.orientation)
+            {
+                case ScreenOrientation.LandscapeLeft:
+                    return -Input.GetTouch(0).deltaPosition.x / Screen.width;
+                case ScreenOrientation.LandscapeRight:
+                    return Input.GetTouch(0).deltaPosition.x / Screen.width;
+                case ScreenOrientation.Portrait:
+                    return Input.GetTouch(0).deltaPosition.y / Screen.height;
+                case ScreenOrientation.PortraitUpsideDown:
+                    return -Input.GetTouch(0).deltaPosition.y / Screen.height;
+                default:
+                    return 0;
+            }
+        }
+
+        /// <summary>
+        /// Actually quit the application.
+        /// </summary>
+        private void DoQuit()
+        {
+            Application.Quit();
+        }
+
+        /// <summary>
+        /// Quit the application if there was a connection error for the ARCore session.
+        /// </summary>
+        private void _QuitOnConnectionErrors()
+        {
+            if (m_IsQuitting)
+            {
+                return;
+            }
+
+            // Quit if ARCore was unable to connect and give Unity some time for the toast to appear.
+            if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
+            {
+                _ShowAndroidToastMessage("Camera permission is needed to run this application.");
+                m_IsQuitting = true;
+                Invoke("DoQuit", 0.5f);
+            }
+            else if (Session.Status == SessionStatus.FatalError)
+            {
+                _ShowAndroidToastMessage("ARCore encountered a problem connecting.  Please start the app again.");
+                m_IsQuitting = true;
+                Invoke("DoQuit", 0.5f);
+            }
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 0471ee42f4eac4098805c8b4aae4875c
+timeCreated: 1512755448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 114 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs

@@ -0,0 +1,114 @@
+//-----------------------------------------------------------------------
+// <copyright file="EdgeDetector.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+namespace GoogleARCore.TextureReader
+{
+    using System;
+    using System.Collections.Generic;
+    using System.IO;
+    using System.Text;
+    using UnityEngine;
+
+    /// <summary>
+    /// Detects edges from input grayscale image.
+    /// </summary>
+    public class EdgeDetector
+    {
+        private static byte[] s_ImageBuffer = new byte[0];
+        private static int s_ImageBufferSize = 0;
+
+        /// <summary>
+        /// Detects edges from input grayscale image.
+        /// </summary>
+        /// <param name="outputImage">Output image buffer, which has a size of width * height.</param>
+        /// <param name="pixelBuffer">Pointer to raw image buffer, assuming one byte per pixel.</param>
+        /// <param name="width">Width of the input image, in pixels.</param>
+        /// <param name="height">Height of the input image, in pixels.</param>
+        /// <returns>False if the outputImage buffer is too small, True otherwise.</returns>
+        public static bool Detect(byte[] outputImage, IntPtr pixelBuffer, int width, int height)
+        {
+            if (outputImage.Length < width * height)
+            {
+                Debug.Log("Input buffer is too small!");
+                return false;
+            }
+
+            Sobel(outputImage, pixelBuffer, width, height);
+
+            return true;
+        }
+
+        private static void Sobel(byte[] outputImage, IntPtr inputImage, int width, int height)
+        {
+            // Adjust buffer size if necessary.
+            int bufferSize = width * height;
+            if (bufferSize != s_ImageBufferSize || s_ImageBuffer.Length == 0)
+            {
+                s_ImageBufferSize = bufferSize;
+                s_ImageBuffer = new byte[bufferSize];
+            }
+
+            // Move raw data into managed buffer.
+            System.Runtime.InteropServices.Marshal.Copy(inputImage, s_ImageBuffer, 0, bufferSize);
+
+            // Detect edges.
+            int threshold = 128 * 128;
+            
+            for (int j = 1; j < height - 1; j++)
+            {
+                for (int i = 1; i < width - 1; i++)
+                {
+                    // Offset of the pixel at [i, j] of the input image.
+                    int offset = (j * width) + i;
+
+                    // Neighbour pixels around the pixel at [i, j].
+                    int a00 = s_ImageBuffer[offset - width - 1];
+                    int a01 = s_ImageBuffer[offset - width];
+                    int a02 = s_ImageBuffer[offset - width + 1];
+                    int a10 = s_ImageBuffer[offset - 1];
+                    int a12 = s_ImageBuffer[offset + 1];
+                    int a20 = s_ImageBuffer[offset + width - 1];
+                    int a21 = s_ImageBuffer[offset + width];
+                    int a22 = s_ImageBuffer[offset + width + 1];
+
+                    // Sobel X filter:
+                    //   -1, 0, 1, 
+                    //   -2, 0, 2, 
+                    //   -1, 0, 1 
+                    int xSum = -a00 - (2 * a10) - a20 + a02 + (2 * a12) + a22;
+
+                    // Sobel Y filter:
+                    //    1, 2, 1, 
+                    //    0, 0, 0, 
+                    //   -1, -2, -1 
+                    int ySum = a00 + (2 * a01) + a02 - a20 - (2 * a21) - a22;
+                    
+                    if ((xSum * xSum) + (ySum * ySum) > threshold)
+                    {
+                        outputImage[(j * width) + i] = 0xFF;
+                    }
+                    else
+                    {
+                        outputImage[(j * width) + i] = 0x1F;
+                    }
+                }
+            }
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 4efa5fefaf4064b6f944e9c9d1803813
+timeCreated: 1512175258
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 214 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs

@@ -0,0 +1,214 @@
+//-----------------------------------------------------------------------
+// <copyright file="TextureReader.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+namespace GoogleARCore.TextureReader
+{
+    using System;
+    using System.Collections.Generic;
+    using GoogleARCore;
+    using UnityEngine;
+    using UnityEngine.Rendering;
+
+    /// <summary>
+    /// Component that provides CPU access to ArCore GPU texture.
+    /// </summary>
+    public class TextureReader : MonoBehaviour
+    {
+        /// <summary>
+        /// Output image width, in pixels.
+        /// </summary>
+        public int ImageWidth = k_ARCoreTextureWidth;
+
+        /// <summary>
+        /// Output image height, in pixels.
+        /// </summary>
+        public int ImageHeight = k_ARCoreTextureHeight;
+        
+        /// <summary>
+        /// Output image sampling option.
+        /// </summary>
+        public SampleMode ImageSampleMode = SampleMode.CoverFullViewport;
+
+        /// <summary>
+        /// Output image format.
+        /// </summary>
+        public TextureReaderApi.ImageFormatType ImageFormat = TextureReaderApi.ImageFormatType.ImageFormatGrayscale;
+
+        private const int k_ARCoreTextureWidth = 1920;
+        private const int k_ARCoreTextureHeight = 1080;
+
+        private TextureReaderApi m_TextureReaderApi = null;
+
+        private CommandType m_Command = CommandType.None;
+
+        private int m_ImageBufferIndex = -1;
+
+        /// <summary>
+        /// Callback function type for receiving the output images.
+        /// </summary>
+        /// <param name="format">The format of the image.</param>
+        /// <param name="width">The width of the image, in pixels.</param>
+        /// <param name="height">The height of the image, in pixels.</param>
+        /// <param name="pixelBuffer">The pointer to the raw buffer of the image pixels.</param>
+        /// <param name="bufferSize">The size of the image buffer, in bytes.</param>
+        public delegate void OnImageAvailableCallbackFunc(TextureReaderApi.ImageFormatType format, int width, int height, IntPtr pixelBuffer, int bufferSize);
+
+        /// <summary>
+        /// Callback function handle for receiving the output images.
+        /// </summary>
+        public event OnImageAvailableCallbackFunc OnImageAvailableCallback = null;   
+
+        /// <summary>
+        /// Options to sample the output image.
+        /// </summary>
+        public enum SampleMode
+        {
+            /// <summary>
+            /// Keeps the same aspect ratio as the GPU texture. Crop image if necessary.
+            /// </summary>
+            KeepAspectRatio,
+
+            /// <summary>
+            /// Samples the entire texture and does not crop. The aspect ratio may be different from the texture aspect ratio.
+            /// </summary>
+            CoverFullViewport
+        }
+
+        private enum CommandType
+        {
+            None,
+            ProcessNextFrame,
+            Create,
+            Reset,
+            ReleasePreviousBuffer
+        }
+
+        /// <summary>
+        /// Start is called on the frame when a script is enabled just before
+        /// any of the Update methods is called the first time.
+        /// </summary>
+        public void Start()
+        {
+            if (m_TextureReaderApi == null)
+            {
+                m_TextureReaderApi = new TextureReaderApi();
+                m_Command = CommandType.Create;
+                m_ImageBufferIndex = -1;
+            }
+        }
+
+        /// <summary>
+        /// This function should be called after any public property is changed.
+        /// </summary>
+        public void Apply()
+        {
+            m_Command = CommandType.Reset;
+        }
+
+        /// <summary>
+        /// Update is called every frame, if the MonoBehaviour is enabled.
+        /// </summary>
+        public void Update()
+        {
+            if (!enabled)
+            {
+                return;
+            }
+
+            // Process command.
+            switch (m_Command)
+            {
+            case CommandType.Create:
+            {
+                m_TextureReaderApi.Create(ImageFormat, ImageWidth, ImageHeight, ImageSampleMode == SampleMode.KeepAspectRatio);
+                break;
+            }
+
+            case CommandType.Reset:
+            {
+                m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
+                m_TextureReaderApi.Destroy();
+                m_TextureReaderApi.Create(ImageFormat, ImageWidth, ImageHeight, ImageSampleMode == SampleMode.KeepAspectRatio);
+                m_ImageBufferIndex = -1;
+                break;
+            }
+
+            case CommandType.ReleasePreviousBuffer:
+            {
+                // Clear previously used buffer, and submits a new request.
+                m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
+                m_ImageBufferIndex = -1;
+                break;
+            }
+
+            case CommandType.ProcessNextFrame:
+            {
+                if (m_ImageBufferIndex >= 0)
+                {
+                    // Get image pixels from previously submitted request.
+                    int bufferSize = 0;
+                    IntPtr pixelBuffer = m_TextureReaderApi.AcquireFrame(m_ImageBufferIndex, ref bufferSize);
+
+                    if (pixelBuffer != IntPtr.Zero && OnImageAvailableCallback != null)
+                    {
+                        OnImageAvailableCallback(ImageFormat, ImageWidth, ImageHeight, pixelBuffer, bufferSize);
+                    }
+
+                    // Release the texture reader internal buffer.
+                    m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
+                }
+
+                break;
+            }
+
+            case CommandType.None:
+            default:
+                break;
+            }
+
+            // Submit reading request for the next frame.
+            int textureId = Frame.CameraImage.Texture.GetNativeTexturePtr().ToInt32();
+            m_ImageBufferIndex = m_TextureReaderApi.SubmitFrame(textureId, k_ARCoreTextureWidth, k_ARCoreTextureHeight);
+
+            // Set next command.
+            m_Command = CommandType.ProcessNextFrame;
+        }
+
+        /// <summary>
+        /// This function is called when the MonoBehaviour will be destroyed.
+        /// </summary>
+        private void OnDestroy()
+        {
+            if (m_TextureReaderApi != null)
+            {
+                m_TextureReaderApi.Destroy();
+                m_TextureReaderApi = null;
+            }
+        }
+        
+        /// <summary>
+        /// This function is called when the behaviour becomes disabled or inactive.
+        /// </summary>
+        private void OnDisable()
+        {
+            // Force to release previously used buffer.
+            m_Command = CommandType.ReleasePreviousBuffer;
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: b8ba03f2a23f74384ac6625e269b5f50
+timeCreated: 1512525798
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 130 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs

@@ -0,0 +1,130 @@
+//-----------------------------------------------------------------------
+// <copyright file="TextureReaderApi.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+namespace GoogleARCore.TextureReader
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Diagnostics.CodeAnalysis;
+    using System.Runtime.InteropServices;
+    using GoogleARCore;
+    using UnityEngine;
+
+    /// <summary>
+    /// API that provides CPU access to GPU texture.
+    /// </summary>
+    [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented",
+    Justification = "Internal")]
+    public class TextureReaderApi
+    {
+        /// <summary>
+        /// Image format type.
+        /// </summary>
+        public enum ImageFormatType
+        {
+            /// <summary>
+            /// Color image pixel format. Four bytes per pixel, in the order of R, G, B, and A.
+            /// </summary>
+            ImageFormatColor = 0,
+           
+            /// <summary>
+            /// Grayscale image pixel format. One byte per pixel.
+            /// </summary>
+            ImageFormatGrayscale = 1
+        }
+
+        /// <summary>
+        /// Creates the texture reader instance.
+        /// </summary>
+        /// <param name="format">Format of the output image pixel. Can be either eImageFormat_RGBA or eImageFormat_I8.</param>
+        /// <param name="width">Width of the output image, in pixels.</param>
+        /// <param name="height">Height of the output image, in pixels.</param>
+        /// <param name="keepAspectRatio">Indicate whether or not to keep aspect ratio. If true, the output image may be cropped 
+        /// if the image aspect ratio is different from the texture aspect ratio. If false, the output image covers the entire
+        /// texture scope and no cropping is applied.</param>
+        public void Create(ImageFormatType format, int width, int height, bool keepAspectRatio)
+        {
+            ExternApi.TextureReader_create((int)format, width, height, keepAspectRatio);
+        }
+
+        /// <summary>
+        /// Destroys the texture reader instance and release internal resources.
+        /// </summary>
+        public void Destroy()
+        {
+            ExternApi.TextureReader_destroy();
+        }
+
+        /// <summary>
+        /// Submits a texture reading request to GPU driver. The result of this request will be available in the next
+        /// frame through AcquireFrame().
+        /// </summary>
+        /// <param name="textureId">The GLES texture id of the input camera texture. It has to be created as OES texture.</param>
+        /// <param name="textureWidth">Width of the texture, in pixels.</param>
+        /// <param name="textureHeight">Height of the texture, in pixels.</param>
+        /// <returns>The frame buffer index, which can be used to retrieve the frame later through AcquireFrame(). -1 if the submission fails.</returns>
+        public int SubmitFrame(int textureId, int textureWidth, int textureHeight)
+        {
+            int bufferIndex = ExternApi.TextureReader_submitFrame(textureId, textureWidth, textureHeight);
+            GL.InvalidateState();
+            return bufferIndex;
+        }
+
+        /// <summary>
+        /// Acquires the output image pixels from a previous reading request.
+        /// </summary>
+        /// <param name="bufferIndex">The buffer index required by previous call to SubmitFrame().</param>
+        /// <param name="bufferSize">The size of the output image pixel buffer, in bytes.</param>
+        /// <returns>The pointer to the raw buffer of the output image. null if fails.</returns>
+        public IntPtr AcquireFrame(int bufferIndex, ref int bufferSize)
+        {
+            IntPtr pixelBuffer = ExternApi.TextureReader_acquireFrame(bufferIndex, ref bufferSize);
+            return pixelBuffer;
+        }
+
+        /// <summary>
+        /// Releases a previously used frame buffer.
+        /// </summary>
+        /// <param name="bufferIndex">The buffer index required by previous call to SubmitFrame().</param>
+        public void ReleaseFrame(int bufferIndex)
+        {
+            ExternApi.TextureReader_releaseFrame(bufferIndex);
+        }
+
+        private struct ExternApi
+        {
+            public const string ARCoreCameraUtilityAPI = "arcore_camera_utility";
+
+            [DllImport(ARCoreCameraUtilityAPI)]
+            public static extern void TextureReader_create(int format, int width, int height, bool keepAspectRatio);
+            
+            [DllImport(ARCoreCameraUtilityAPI)]
+            public static extern void TextureReader_destroy();
+
+            [DllImport(ARCoreCameraUtilityAPI)]
+            public static extern int TextureReader_submitFrame(int textureId, int textureWidth, int textureHeight);
+
+            [DllImport(ARCoreCameraUtilityAPI)]
+            public static extern IntPtr TextureReader_acquireFrame(int bufferIndex, ref int bufferSize);
+
+            [DllImport(ARCoreCameraUtilityAPI)]
+            public static extern void TextureReader_releaseFrame(int bufferIndex);
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: b6c5057504d004df59cb05eeea4454ae
+timeCreated: 1511999811
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
citymodell/Assets/GoogleARCore/Prefabs.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a00108229b1e04acd805e57abcdff773
+folderAsset: yes
+timeCreated: 1492558533
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 150 - 0
citymodell/Assets/GoogleARCore/Prefabs/ARCore Device.prefab

@@ -0,0 +1,150 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1772147192650458}
+  m_IsPrefabParent: 1
+--- !u!1 &1637996540812124
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4497055787654456}
+  - component: {fileID: 20155940112608238}
+  - component: {fileID: 114963366853050710}
+  - component: {fileID: 114876698896786350}
+  m_Layer: 0
+  m_Name: First Person Camera
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1772147192650458
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4442908887562770}
+  - component: {fileID: 114451889682527732}
+  m_Layer: 0
+  m_Name: ARCore Device
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4442908887562770
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1772147192650458}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 4497055787654456}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!4 &4497055787654456
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1637996540812124}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 4442908887562770}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!20 &20155940112608238
+Camera:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1637996540812124}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 2
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.05
+  far clip plane: 200
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!114 &114451889682527732
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1772147192650458}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  SessionConfig: {fileID: 11400000, guid: 9586a84d6c32f46b6ab7aeb6042f160d, type: 2}
+--- !u!114 &114876698896786350
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1637996540812124}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
+--- !u!114 &114963366853050710
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1637996540812124}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Device: 0
+  m_PoseSource: 6
+  m_TrackingType: 0
+  m_UpdateType: 2
+  m_UseRelativeTransform: 1

+ 10 - 0
citymodell/Assets/GoogleARCore/Prefabs/ARCore Device.prefab.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c10877f7cd5764de18d46d7b777d1faa
+timeCreated: 1501460862
+licenseType: Free
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 100100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 53 - 0
citymodell/Assets/GoogleARCore/Prefabs/Environmental Light.prefab

@@ -0,0 +1,53 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1248447649449928}
+  m_IsPrefabParent: 1
+--- !u!1 &1248447649449928
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4461716624848968}
+  - component: {fileID: 114136752755502098}
+  m_Layer: 0
+  m_Name: Environmental Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4461716624848968
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1248447649449928}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &114136752755502098
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1248447649449928}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 10 - 0
citymodell/Assets/GoogleARCore/Prefabs/Environmental Light.prefab.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cf498fc35b538884db557f7a9a2c0ef9
+timeCreated: 1512062703
+licenseType: Pro
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 84e45386d8da3497591c38deb2bccd02
+folderAsset: yes
+timeCreated: 1502400656
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e1e9a08d000a446c9ad506ecb3a4d083
+folderAsset: yes
+timeCreated: 1513969093
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ede998a9371e74aa6a759743f41b3eb6
+folderAsset: yes
+timeCreated: 1513969093
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 42098948be8564f678777d26e6906df3
+folderAsset: yes
+timeCreated: 1513969093
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_shared.dll


+ 95 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_shared.dll.meta

@@ -0,0 +1,95 @@
+fileFormatVersion: 2
+guid: 3a5f7d59b4b729446a1d2a9999f62bdb
+timeCreated: 1513200317
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 1
+        Exclude Editor: 0
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+        DefaultValueInitialized: true
+        OS: Windows
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 101 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle.meta

@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: 1785ef67a37b1402f8f80e1f0658e486
+folderAsset: yes
+timeCreated: 1515110710
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Editor: 0
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      '': OSXIntel
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      '': OSXIntel64
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+        DefaultValueInitialized: true
+        OS: OSX
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c22c793c4b5f447bbb532e92cb93d5ac
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 33d076be2f74340b98cb58cefe9122f7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/instant_preview_unity_plugin


+ 9 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/instant_preview_unity_plugin.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 27a7f7613c41541ef8517d1b5390962b
+timeCreated: 1516418595
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/libinstant_preview_shared.dylib


+ 9 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.bundle/Contents/MacOS/libinstant_preview_shared.dylib.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9a49dee3272c24e7794351bb17e92bd3
+timeCreated: 1516418595
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.dll


+ 95 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/instant_preview_unity_plugin.dll.meta

@@ -0,0 +1,95 @@
+fileFormatVersion: 2
+guid: d80cb1919279b7348924bc747e2ada70
+timeCreated: 1513200317
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 1
+        Exclude Editor: 0
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+        DefaultValueInitialized: true
+        OS: Windows
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a10b012db03ac404a87dcb0519846527
+folderAsset: yes
+timeCreated: 1513969093
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 186 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs

@@ -0,0 +1,186 @@
+//-----------------------------------------------------------------------
+// <copyright file="InstantPreviewInput.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using System;
+    using System.Diagnostics.CodeAnalysis;
+    using System.Runtime.InteropServices;
+    using GoogleARCoreInternal;
+    using UnityEngine;
+
+    /// <summary>
+    /// Helper class that provides touch input in lieu of Input.GetTouch when
+    /// running the Unity Editor.
+    /// </summary>
+    public static class InstantPreviewInput
+    {
+        private static Touch[] s_Touches = new Touch[0];
+
+        /// <summary>
+        /// Gets the available touch inputs from Instant Preview since the last
+        /// update.
+        /// </summary>
+        [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
+         Justification = "Overridden field.")]
+        public static Touch[] touches
+        {
+            get
+            {
+                return s_Touches;
+            }
+        }
+
+        /// <summary>
+        /// Gets the number of touches available from Instant preview since the
+        /// last update.
+        /// </summary>
+        [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
+         Justification = "Overridden field.")]
+        public static int touchCount
+        {
+            get
+            {
+                return touches.Length;
+            }
+        }
+
+        /// <summary>
+        /// Gets return value of Input.mousePosition.
+        /// </summary>
+        [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
+         Justification = "Overridden field.")]
+        public static Vector3 mousePosition
+        {
+            get
+            {
+                return Input.mousePosition;
+            }
+        }
+
+        /// <summary>
+        /// Gets a value indicating whether a mouse device is detected.
+        /// </summary>
+        [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
+         Justification = "Overridden field.")]
+        public static bool mousePresent
+        {
+            get
+            {
+                return Input.mousePresent;
+            }
+        }
+
+        /// <summary>
+        /// Gets a specific touch input from Instant Preview by index.
+        /// </summary>
+        /// <param name="index">Index of touch input to get.</param>
+        /// <returns>Touch data.</returns>
+        public static Touch GetTouch(int index)
+        {
+            return touches[index];
+        }
+
+        /// <summary>
+        /// Passthrough function to Input.GetKey.
+        /// </summary>
+        /// <param name="keyCode">Key parameter to pass to Input.GetKey.</param>
+        /// <returns>Key state returned from Input.GetKey.</returns>
+        public static bool GetKey(KeyCode keyCode)
+        {
+            return Input.GetKey(keyCode);
+        }
+
+        /// <summary>
+        /// Passthrough function to Input.GetMouseButton.
+        /// </summary>
+        /// <param name="button">Button index.</param>
+        /// <returns>Return value of Input.GetMouseButton.</returns>
+        public static bool GetMouseButton(int button)
+        {
+            return Input.GetMouseButton(button);
+        }
+
+        /// <summary>
+        /// Passthrough function to Input.GetMouseButtonDown.
+        /// </summary>
+        /// <param name="button">Button index.</param>
+        /// <returns>Return value of Input.GetMouseButtonDown.</returns>
+        public static bool GetMouseButtonDown(int button)
+        {
+            return Input.GetMouseButtonDown(button);
+        }
+
+        /// <summary>
+        /// Passthrough function to Input.GetMouseButtonUp.
+        /// </summary>
+        /// <param name="button">Button index.</param>
+        /// <returns>Return value of Input.GetMouseButtonUp.</returns>
+        public static bool GetMouseButtonUp(int button)
+        {
+            return Input.GetMouseButtonUp(button);
+        }
+
+        /// <summary>
+        /// Refreshes touch inputs from Instant Preview to reflect the state
+        /// since the last time Update was called.
+        /// </summary>
+        public static void Update()
+        {
+            if (!Application.isEditor)
+            {
+                return;
+            }
+
+            IntPtr nativeTouchesPtr;
+            int nativeTouchCount;
+            NativeApi.GetTouches(out nativeTouchesPtr, out nativeTouchCount);
+
+            var structSize = Marshal.SizeOf(typeof(NativeTouch));
+            s_Touches = new Touch[nativeTouchCount];
+            for (var i = 0; i < nativeTouchCount; ++i)
+            {
+                var source = new IntPtr(nativeTouchesPtr.ToInt64() + (i * structSize));
+                var nativeTouch = (NativeTouch)Marshal.PtrToStructure(source, typeof(NativeTouch));
+
+                s_Touches[i] = new Touch()
+                {
+                    phase = nativeTouch.Phase,
+
+                    // Note that the Unity's screen coordinate (0, 0) starts from bottom left.
+                    position = new Vector2(nativeTouch.X, Screen.height - nativeTouch.Y),
+                };
+            }
+        }
+
+        private struct NativeTouch
+        {
+            public TouchPhase Phase;
+            public float X;
+            public float Y;
+        }
+
+        private struct NativeApi
+        {
+            [DllImport(InstantPreviewManager.InstantPreviewNativeApi)]
+            public static extern void GetTouches(out IntPtr touches, out int count);
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: ed2d2995c742a6c4490fa51080dbf4cf
+timeCreated: 1512422473
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 470 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs

@@ -0,0 +1,470 @@
+//-----------------------------------------------------------------------
+// <copyright file="InstantPreviewManager.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+    using System;
+    using System.Collections;
+    using System.IO;
+    using System.Runtime.InteropServices;
+    using System.Text;
+    using System.Threading;
+    using GoogleARCore;
+    using UnityEngine;
+    using UnityEngine.Rendering;
+    using UnityEngine.SpatialTracking;
+
+    /// <summary>
+    /// Contains methods for managing communication to the Instant Preview 
+    /// plugin.
+    /// </summary>
+    public static class InstantPreviewManager
+    {
+        /// <summary>
+        /// Name of the Instant Preview plugin library.
+        /// </summary>
+        public const string InstantPreviewNativeApi = "instant_preview_unity_plugin";
+
+        // Guid is taken from meta file and should never change.
+        private const string k_ApkGuid = "cf7b10762fe921e40a18151a6c92a8a6";
+        private const string k_NoDevicesFoundAdbResult = "error: no devices/emulators found";
+        private const float k_MaxTolerableAspectRatioDifference = 0.1f;
+        private const string k_MismatchedAspectRatioWarningFormatString =
+            "The aspect ratio of your game window is different from the aspect ratio of your Instant Preview camera " +
+            "texture. Please resize your game window's aspect ratio to match, or your preview will be distorted. The " +
+            "camera texture resolution is {0}, {1}.";
+
+        private static readonly WaitForEndOfFrame k_WaitForEndOfFrame = new WaitForEndOfFrame();
+
+        /// <summary>
+        /// Coroutine method that communicates to the Instant Preview plugin 
+        /// every frame.
+        /// 
+        /// If not running in the editor, this does nothing.
+        /// </summary>
+        /// <returns>Enumerator for a coroutine that updates Instant Preview
+        /// every frame.</returns>
+        public static IEnumerator InitializeIfNeeded()
+        {
+            // Terminates if not running in editor.
+            if (!Application.isEditor)
+            {
+                yield break;
+            }
+
+            // User may have explicitly disabled Instant Preview.
+            if (ARCoreProjectSettings.Instance != null && 
+                !ARCoreProjectSettings.Instance.IsInstantPreviewEnabled)
+            {
+                yield break;
+            }
+
+            var adbPath = InstantPreviewManager.GetAdbPath();
+            if (adbPath == null)
+            {
+                Debug.LogError("Instant Preview requires your Unity Android SDK path to be set. Please set it under " +
+                               "Preferences/External Tools/Android. You may need to install the Android SDK first.");
+                yield break;
+            }
+            else if (!File.Exists(adbPath))
+            {
+                Debug.LogErrorFormat("adb not found at \"{0}\". Please add adb to your SDK path and restart the Unity editor.", adbPath);
+                yield break;
+            }
+
+            string localVersion;
+            if (!StartServer(adbPath, out localVersion))
+            {
+                yield break;
+            }
+
+            yield return InstallApkAndRunIfConnected(adbPath, localVersion);
+
+            yield return UpdateLoop();
+        }
+
+        /// <summary>
+        /// Uploads the latest camera video frame received from Instant Preview
+        /// to the specified texture. The texture might be recreated if it is
+        /// not the right size or null.
+        /// </summary>
+        /// <param name="backgroundTexture">Texture variable to store the latest
+        /// Instant Preview video frame.</param>
+        /// <returns>True if InstantPreview updated the background texture, 
+        /// false if it did not and the texture still needs updating.</returns>
+        public static bool UpdateBackgroundTextureIfNeeded(ref Texture2D backgroundTexture)
+        {
+            if (!Application.isEditor)
+            {
+                return false;
+            }
+
+            IntPtr pixelBytes;
+            int width;
+            int height;
+            if (NativeApi.LockCameraTexture(out pixelBytes, out width, out height))
+            {
+                if (backgroundTexture == null || width != backgroundTexture.width ||
+                    height != backgroundTexture.height)
+                {
+                    backgroundTexture = new Texture2D(width, height, TextureFormat.BGRA32, false);
+                }
+
+                backgroundTexture.LoadRawTextureData(pixelBytes, width * height * 4);
+                backgroundTexture.Apply();
+
+                NativeApi.UnlockCameraTexture();
+            }
+
+            return true;
+        }
+
+        private static IEnumerator UpdateLoop()
+        {
+            // Creates a target texture to capture the preview window onto.
+            // Some video encoders prefer the dimensions to be a multiple of 16.
+            var targetWidth = RoundUpToNearestMultipleOf16(Screen.width);
+            var targetHeight = RoundUpToNearestMultipleOf16(Screen.height);
+            var screenTexture = new RenderTexture(targetWidth, targetHeight, 0);
+
+            var renderEventFunc = NativeApi.GetRenderEventFunc();
+            var shouldConvertToBrgra = SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D11;
+            var targetTexture = screenTexture;
+            RenderTexture bgrTexture = null;
+            if (shouldConvertToBrgra)
+            {
+                bgrTexture = new RenderTexture(screenTexture.width, screenTexture.height, 0, RenderTextureFormat.BGRA32);
+                targetTexture = bgrTexture;
+            }
+
+            var loggedAspectRatioWarning = false;
+
+            // Begins update loop. The coroutine will cease when the 
+            // ARCoreSession component it's called from is destroyed.
+            for (;;)
+            {
+                yield return k_WaitForEndOfFrame;
+                NativeApi.Update();
+                InstantPreviewInput.Update();
+                AddInstantPreviewTrackedPoseDriverWhenNeeded();
+
+                Graphics.Blit(null, screenTexture);
+
+                if (shouldConvertToBrgra)
+                {
+                    Graphics.Blit(screenTexture, bgrTexture);
+                }
+
+                var cameraTexture = Frame.CameraImage.Texture;
+                if (!loggedAspectRatioWarning && cameraTexture != null)
+                {
+                    var sourceWidth = cameraTexture.width;
+                    var sourceHeight = cameraTexture.height;
+                    var sourceAspectRatio = (float)sourceWidth / sourceHeight;
+                    var destinationWidth = Screen.width;
+                    var destinationHeight = Screen.height;
+                    var destinationAspectRatio = (float)destinationWidth / destinationHeight;
+
+                    if (Mathf.Abs(sourceAspectRatio - destinationAspectRatio) >
+                        k_MaxTolerableAspectRatioDifference)
+                    {
+                        Debug.LogWarning(string.Format(k_MismatchedAspectRatioWarningFormatString, sourceWidth,
+                                                       sourceHeight));
+                        loggedAspectRatioWarning = true;
+                    }
+                }
+
+                NativeApi.SendFrame(targetTexture.GetNativeTexturePtr());
+                GL.IssuePluginEvent(renderEventFunc, 69);
+            }
+        }
+
+        private static void AddInstantPreviewTrackedPoseDriverWhenNeeded()
+        {
+            foreach (var poseDriver in Component.FindObjectsOfType<TrackedPoseDriver>())
+            {
+                poseDriver.enabled = false;
+                var gameObject = poseDriver.gameObject;
+                var hasInstantPreviewTrackedPoseDriver =
+                    gameObject.GetComponent<InstantPreviewTrackedPoseDriver>() != null;
+                if (!hasInstantPreviewTrackedPoseDriver)
+                {
+                    gameObject.AddComponent<InstantPreviewTrackedPoseDriver>();
+                }
+            }
+        }
+
+        private static string GetAdbPath()
+        {
+            string sdkRoot = null;
+#if UNITY_EDITOR
+            // Gets adb path and starts instant preview server.
+            sdkRoot = UnityEditor.EditorPrefs.GetString("AndroidSdkRoot");
+#endif // UNITY_EDITOR
+
+            if (string.IsNullOrEmpty(sdkRoot))
+            {
+                return null;
+            }
+
+            // Gets adb path from known directory.
+            var adbPath = Path.Combine(Path.GetFullPath(sdkRoot), "platform-tools" + Path.DirectorySeparatorChar + "adb");
+
+            if (Application.platform == RuntimePlatform.WindowsEditor)
+            {
+                adbPath = Path.ChangeExtension(adbPath, "exe");
+            }
+
+            return adbPath;
+        }
+
+        /// <summary>
+        /// Tries to install and run the Instant Preview android app.
+        /// </summary>
+        /// <param name="adbPath">Path to adb to use for installing.</param>
+        /// <param name="localVersion">Local version of Instant Preview plugin to compare installed APK against.</param>
+        /// <returns>Enumerator for coroutine that handles installation if necessary.</returns>
+        private static IEnumerator InstallApkAndRunIfConnected(string adbPath, string localVersion)
+        {
+            string apkPath = null;
+
+#if UNITY_EDITOR
+            apkPath = UnityEditor.AssetDatabase.GUIDToAssetPath(k_ApkGuid);
+#endif // !UNITY_EDITOR
+
+            // Early outs if set to install but the apk can't be found.
+            if (!File.Exists(apkPath))
+            {
+                Debug.LogError(
+                    string.Format("Trying to install Instant Preview apk but reference to InstantPreview.apk is " +
+                                  "broken. Couldn't find an asset with .meta file guid={0}", k_ApkGuid));
+                yield break;
+            }
+
+            Result result = new Result();
+
+            Thread checkAdbThread = new Thread((object obj) =>
+            {
+                Result res = (Result)obj;
+                string output;
+                string errors;
+
+                // Gets version of installed apk.
+                RunAdbCommand(adbPath, "shell dumpsys package com.google.ar.core.instantpreview | grep versionName",
+                              out output, out errors);
+                string installedVersion = null;
+                if (!string.IsNullOrEmpty(output) && string.IsNullOrEmpty(errors))
+                {
+                    installedVersion = output.Substring(output.IndexOf('=') + 1);
+                }
+
+                // Early outs if no device is connected.
+                if (string.Compare(errors, k_NoDevicesFoundAdbResult) == 0)
+                {
+                    return;
+                }
+
+                // Prints errors and exits on failure.
+                if (!string.IsNullOrEmpty(errors))
+                {
+                    Debug.LogError(errors);
+                    return;
+                }
+
+                if (installedVersion == null)
+                {
+                    Debug.Log(string.Format(
+                        "Instant Preview: app not found on device, attempting to install it from {0}.",
+                        apkPath));
+                }
+                else if (installedVersion != localVersion)
+                {
+                    Debug.Log(string.Format(
+                        "Instant Preview: installed version \"{0}\" does not match local version \"{1}\", attempting upgrade.",
+                        installedVersion, localVersion));
+                }
+
+                res.ShouldPromptForInstall = installedVersion != localVersion;
+            });
+            checkAdbThread.Start(result);
+
+            while (!checkAdbThread.Join(0))
+            {
+                yield return 0;
+            }
+
+            if (result.ShouldPromptForInstall)
+            {
+                if (PromptToInstall())
+                {
+                    Thread installThread = new Thread(() =>
+                    {
+                        string output;
+                        string errors;
+
+                        RunAdbCommand(adbPath,
+                            string.Format("uninstall com.google.ar.core.instantpreview", apkPath),
+                            out output, out errors);
+
+                        RunAdbCommand(adbPath,
+                            string.Format("install \"{0}\"", apkPath),
+                            out output, out errors);
+
+                        // Prints any output from trying to install.
+                        if (!string.IsNullOrEmpty(output))
+                        {
+                            Debug.Log(output);
+                        }
+
+                        if (!string.IsNullOrEmpty(errors))
+                        {
+                            if (string.Equals(errors, "Success"))
+                            {
+                                Debug.Log("Successfully installed Instant Preview app.");
+                            }
+                            else
+                            {
+                                Debug.LogError(errors);
+                            }
+                        }
+                    });
+                    installThread.Start();
+
+                    while (!installThread.Join(0))
+                    {
+                        yield return 0;
+                    }
+                }
+                else
+                {
+                    yield break;
+                }
+            }
+
+            if (!NativeApi.IsConnected())
+            {
+                new Thread(() =>
+                {
+                    string output;
+                    string errors;
+                    RunAdbCommand(adbPath,
+                        "shell am start -n com.google.ar.core.instantpreview/.InstantPreviewActivity",
+                        out output, out errors);
+                }).Start();
+            }
+        }
+
+        private static bool PromptToInstall()
+        {
+#if UNITY_EDITOR
+            return UnityEditor.EditorUtility.DisplayDialog("Instant Preview",
+                        "To instantly reflect your changes on device, the " +
+                        "Instant Preview app will be installed on your " +
+                        "connected phone.\n\nTo permanently disable Instant Preview, " +
+                        "uncheck the InstantPreviewEnabled checkbox in Edit/Project Settings/ARCore Instant Preview Enabled.", "Okay", "Don't Install This Time");
+#else
+            return false;
+#endif
+        }
+
+        private static void RunAdbCommand(string fileName, string arguments, out string output, out string errors)
+        {
+            using (var process = new System.Diagnostics.Process())
+            {
+                var startInfo = new System.Diagnostics.ProcessStartInfo(fileName, arguments);
+                startInfo.UseShellExecute = false;
+                startInfo.RedirectStandardError = true;
+                startInfo.RedirectStandardOutput = true;
+                startInfo.CreateNoWindow = true;
+                process.StartInfo = startInfo;
+
+                var outputBuilder = new StringBuilder();
+                var errorBuilder = new StringBuilder();
+                process.OutputDataReceived += (sender, ef) => outputBuilder.Append(ef.Data);
+                process.ErrorDataReceived += (sender, ef) => errorBuilder.Append(ef.Data);
+
+                process.Start();
+                process.BeginOutputReadLine();
+                process.BeginErrorReadLine();
+                process.WaitForExit();
+                process.Close();
+
+                // Trims the output strings to make comparison easier.
+                output = outputBuilder.ToString().Trim();
+                errors = errorBuilder.ToString().Trim();
+            }
+        }
+
+        private static bool StartServer(string adbPath, out string version)
+        {
+            // Tries to start server.
+            const int k_InstantPreviewVersionStringMaxLength = 64;
+            var versionStringBuilder = new StringBuilder(k_InstantPreviewVersionStringMaxLength);
+            var started = NativeApi.InitializeInstantPreview(adbPath, versionStringBuilder,
+                                                             versionStringBuilder.Capacity);
+            if (!started)
+            {
+                Debug.LogErrorFormat("Couldn't start Instant Preview server with adb path: {0}.", adbPath);
+                version = null;
+                return false;
+            }
+
+            version = versionStringBuilder.ToString();
+            Debug.Log("Instant Preview Version: " + version);
+            return true;
+        }
+
+        private static int RoundUpToNearestMultipleOf16(int value)
+        {
+            return (value + 15) & ~15;
+        }
+
+        private struct NativeApi
+        {
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern bool InitializeInstantPreview(
+                string adbPath, StringBuilder version, int versionStringLength);
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern void Update();
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern IntPtr GetRenderEventFunc();
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern void SendFrame(IntPtr renderTexture);
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern bool LockCameraTexture(out IntPtr pixelBytes, out int width,
+                out int height);
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern void UnlockCameraTexture();
+
+            [DllImport(InstantPreviewNativeApi)]
+            public static extern bool IsConnected();
+        }
+
+        private class Result
+        {
+            public bool ShouldPromptForInstall = false;
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 8d78f35e6ec68ed4ba199eddf266e308
+timeCreated: 1513720134
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 46 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewTrackedPoseDriver.cs

@@ -0,0 +1,46 @@
+//-----------------------------------------------------------------------
+// <copyright file="InstantPreviewTrackedPoseDriver.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using UnityEngine;
+
+    /// <summary>
+    /// Drives cameras when using Instant Preview, since there is no easy way to
+    /// provide data to Unity's TrackedPoseDriver.
+    /// </summary>
+    public class InstantPreviewTrackedPoseDriver : MonoBehaviour
+    {
+        /// <summary>
+        /// Updates the game object's transform to that of the latest pose 
+        /// received by Instant Preview.
+        /// </summary>
+        public void Update()
+        {
+            if (!Application.isEditor)
+            {
+                return;
+            }
+
+            transform.position = Frame.Pose.position;
+            transform.rotation = Frame.Pose.rotation;
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewTrackedPoseDriver.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 307167e96a9af144789862588807c91b
+timeCreated: 1512450063
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
citymodell/Assets/GoogleARCore/SDK/Materials.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b2c4e904b5e6b425f8ab111db67d7908
+folderAsset: yes
+timeCreated: 1497981256
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 76 - 0
citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.mat

@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_Name: ARBackground
+  m_Shader: {fileID: 4800000, guid: 025775b2b3616154f9eec0261bb8a581, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

+ 9 - 0
citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.mat.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 03ad0130a037647aeb60218f61aca114
+timeCreated: 1498003566
+licenseType: Pro
+NativeFormatImporter:
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 117 - 0
citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.shader

@@ -0,0 +1,117 @@
+Shader "ARCore/ARBackground"
+{
+    Properties {
+        _MainTex ("Texture", 2D) = "white" {}
+        _UvTopLeftRight ("UV of top corners", Vector) = (0, 1, 1, 1)
+        _UvBottomLeftRight ("UV of bottom corners", Vector) = (0 , 0, 1, 0) 
+    }
+
+    // For GLES3
+    SubShader
+    {
+        Pass
+        {
+            ZWrite Off
+
+            GLSLPROGRAM
+
+            #pragma only_renderers gles3
+
+            #ifdef SHADER_API_GLES3
+            #extension GL_OES_EGL_image_external_essl3 : require
+            #endif
+
+            uniform vec4 _UvTopLeftRight;
+            uniform vec4 _UvBottomLeftRight;
+
+            #ifdef VERTEX
+
+            varying vec2 textureCoord;
+
+            void main()
+            {
+                #ifdef SHADER_API_GLES3
+                vec2 uvTop = mix(_UvTopLeftRight.xy, _UvTopLeftRight.zw, gl_MultiTexCoord0.x);
+                vec2 uvBottom = mix(_UvBottomLeftRight.xy, _UvBottomLeftRight.zw, gl_MultiTexCoord0.x);
+                textureCoord = mix(uvTop, uvBottom, gl_MultiTexCoord0.y);
+
+                gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+                #endif
+            }
+
+            #endif
+
+            #ifdef FRAGMENT
+            varying vec2 textureCoord;
+            uniform samplerExternalOES _MainTex;
+
+            void main()
+            {
+                #ifdef SHADER_API_GLES3
+                gl_FragColor = texture(_MainTex, textureCoord);
+                #endif
+            }
+
+            #endif
+
+            ENDGLSL
+        }
+    }
+
+  Subshader
+  {
+    Pass
+    {
+      ZWrite Off
+
+      CGPROGRAM
+
+      #pragma exclude_renderers gles3
+      #pragma vertex vert
+      #pragma fragment frag
+
+      #include "UnityCG.cginc"
+
+      uniform float4 _UvTopLeftRight;
+      uniform float4 _UvBottomLeftRight;
+
+      struct appdata
+      {
+        float4 vertex : POSITION;
+        float2 uv : TEXCOORD0;
+      };
+
+      struct v2f
+      {
+        float2 uv : TEXCOORD0;
+        float4 vertex : SV_POSITION;
+      };
+
+      v2f vert(appdata v)
+      {
+        float2 uvTop = lerp(_UvTopLeftRight.xy, _UvTopLeftRight.zw, v.uv.x);
+        float2 uvBottom = lerp(_UvBottomLeftRight.xy, _UvBottomLeftRight.zw, v.uv.x);
+
+        v2f o;
+        o.vertex = UnityObjectToClipPos(v.vertex);
+        o.uv = lerp(uvTop, uvBottom, v.uv.y);
+
+        // Instant preview's texture is transformed differently.
+        o.uv = o.uv.yx;
+        o.uv.x = 1.0 - o.uv.x;
+
+        return o;
+      }
+
+      sampler2D _MainTex;
+
+      fixed4 frag(v2f i) : SV_Target
+      {
+        return tex2D(_MainTex, i.uv);
+      }
+      ENDCG
+    }
+  }
+
+  FallBack Off
+}

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/Materials/ARBackground.shader.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 025775b2b3616154f9eec0261bb8a581
+timeCreated: 1510285086
+licenseType: Pro
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 93be2b9777c348648a2d9151b7e233fc
+folderAsset: yes
+timeCreated: 1501825151
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar


+ 31 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar.meta

@@ -0,0 +1,31 @@
+fileFormatVersion: 2
+guid: 19eddef6ceb6961489b26fb8bf19f1e5
+timeCreated: 1517361316
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar


+ 32 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: e2fd4640a9f7349438a5920ea2fb35f2
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar


+ 31 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar.meta

@@ -0,0 +1,31 @@
+fileFormatVersion: 2
+guid: cb4b89ba21eac484797cfca938a1a5ea
+timeCreated: 1518222591
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/libarcore_unity_api.so


+ 103 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/libarcore_unity_api.so.meta

@@ -0,0 +1,103 @@
+fileFormatVersion: 2
+guid: d9b715dad41754ff39bd62a2954dadf9
+timeCreated: 1510001161
+licenseType: Free
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 0
+        Exclude Editor: 1
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+        Exclude iOS: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 0
+      settings:
+        CompileFlags: 
+        FrameworkDependencies: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/libarpresto_api.so


+ 95 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/libarpresto_api.so.meta

@@ -0,0 +1,95 @@
+fileFormatVersion: 2
+guid: ccde220b10a8b441a9b728f80d014cfe
+timeCreated: 1513372698
+licenseType: Pro
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 0
+        Exclude Editor: 1
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar


+ 31 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar.meta

@@ -0,0 +1,31 @@
+fileFormatVersion: 2
+guid: bd091fc8013c942f586c1672b8ee2b27
+timeCreated: 1500400815
+licenseType: Free
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
citymodell/Assets/GoogleARCore/SDK/Plugins/unitygar.aar


+ 31 - 0
citymodell/Assets/GoogleARCore/SDK/Plugins/unitygar.aar.meta

@@ -0,0 +1,31 @@
+fileFormatVersion: 2
+guid: f62612db4b24deb43ada3a769754a2f7
+timeCreated: 1503511556
+licenseType: Free
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8f3875959d8dd4bdeb9620e0eb96fb3b
+folderAsset: yes
+timeCreated: 1501446012
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 109 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs

@@ -0,0 +1,109 @@
+//-----------------------------------------------------------------------
+// <copyright file="ARCoreBackgroundRenderer.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using System.Collections;
+    using System.Collections.Generic;
+    using GoogleARCoreInternal;
+    using UnityEngine;
+    using UnityEngine.XR;
+
+    /// <summary>
+    /// Renders the device's camera as a background to the attached Unity camera component.
+    /// </summary>
+    [RequireComponent(typeof(Camera))]
+    public class ARCoreBackgroundRenderer : MonoBehaviour
+    {
+        /// <summary>
+        /// A material used to render the AR background image.
+        /// </summary>
+        [Tooltip("A material used to render the AR background image.")]
+        public Material BackgroundMaterial;
+
+        private Camera m_Camera;
+
+        private ARBackgroundRenderer m_BackgroundRenderer;
+
+        private void OnEnable()
+        {
+            if (BackgroundMaterial == null)
+            {
+                Debug.LogError("ArCameraBackground:: No material assigned.");
+                return;
+            }
+
+            m_Camera = GetComponent<Camera>();
+        }
+
+        private void OnDisable()
+        {
+            Disable();
+        }
+
+        private void Update()
+        {
+            if (BackgroundMaterial == null)
+            {
+                Disable();
+                return;
+            }
+
+            Texture backgroundTexture = Frame.CameraImage.Texture;
+            if (backgroundTexture == null)
+            {
+                Disable();
+                return;
+            }
+
+            const string mainTexVar = "_MainTex";
+            const string topLeftRightVar = "_UvTopLeftRight";
+            const string bottomLeftRightVar = "_UvBottomLeftRight";
+
+            BackgroundMaterial.SetTexture(mainTexVar, backgroundTexture);
+
+            var uvQuad = Frame.CameraImage.DisplayUvCoords;
+            BackgroundMaterial.SetVector(topLeftRightVar,
+                new Vector4(uvQuad.TopLeft.x, uvQuad.TopLeft.y, uvQuad.TopRight.x, uvQuad.TopRight.y));
+            BackgroundMaterial.SetVector(bottomLeftRightVar,
+                new Vector4(uvQuad.BottomLeft.x, uvQuad.BottomLeft.y, uvQuad.BottomRight.x, uvQuad.BottomRight.y));
+
+            m_Camera.projectionMatrix = Frame.CameraImage.GetCameraProjectionMatrix(
+                m_Camera.nearClipPlane, m_Camera.farClipPlane);
+
+            if (m_BackgroundRenderer == null)
+            {
+                m_BackgroundRenderer = new ARBackgroundRenderer();
+                m_BackgroundRenderer.backgroundMaterial = BackgroundMaterial;
+                m_BackgroundRenderer.camera = m_Camera;
+                m_BackgroundRenderer.mode = ARRenderMode.MaterialAsBackground;
+            }
+        }
+
+        private void Disable()
+        {
+            if (m_BackgroundRenderer != null)
+            {
+                m_BackgroundRenderer.camera = null;
+                m_BackgroundRenderer = null;
+            }
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: eb172c260d42e4f62945afda50892c0c
+timeCreated: 1510461368
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 69 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs

@@ -0,0 +1,69 @@
+//-----------------------------------------------------------------------
+// <copyright file="ARCoreSession.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using GoogleARCoreInternal;
+    using UnityEngine;
+
+    /// <summary>
+    /// A component that manages the ARCore Session in a Unity scene.
+    /// </summary>
+    public class ARCoreSession : MonoBehaviour
+    {
+        /// <summary>
+        /// A scriptable object specifying the ARCore session configuration.
+        /// </summary>
+        [Tooltip("A scriptable object specifying the ARCore session configuration.")]
+        public ARCoreSessionConfig SessionConfig;
+
+        /// <summary>
+        /// Unity Awake.
+        /// </summary>
+        public void Awake()
+        {
+            LifecycleManager.Instance.CreateSession(this);
+        }
+
+        /// <summary>
+        /// Unity OnDestroy.
+        /// </summary>
+        public void OnDestroy()
+        {
+            LifecycleManager.Instance.DestroySession();
+        }
+
+        /// <summary>
+        /// Unity OnEnable.
+        /// </summary>
+        public void OnEnable()
+        {
+            LifecycleManager.Instance.EnableSession();
+        }
+
+        /// <summary>
+        /// Unity OnDisable.
+        /// </summary>
+        public void OnDisable()
+        {
+            LifecycleManager.Instance.DisableSession();
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9
+timeCreated: 1510461671
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 51 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs

@@ -0,0 +1,51 @@
+//-----------------------------------------------------------------------
+// <copyright file="ARCoreSessionConfig.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using UnityEngine;
+
+    /// <summary>
+    /// Holds settings that are used to configure the session.
+    /// </summary>
+    [CreateAssetMenu(fileName = "ARCoreSessionConfig", menuName = "GoogleARCore/SessionConfig", order = 1)]
+    public class ARCoreSessionConfig : ScriptableObject
+    {
+        /// <summary>
+        /// Toggles whether the rendering frame rate matches the background camera frame rate.
+        /// Setting this to true will also set QualitySetting.vSyncCount to 0, which will make your entire app to run at the background camera frame rate (including animations, UI interaction, etc.).
+        /// Setting this to false could incur extra power overhead due to rendering the same background more than once.
+        /// </summary>
+        [Tooltip("Toggles whether the rendering frame rate matches the background camera frame rate")]
+        public bool MatchCameraFramerate = true;
+
+        /// <summary>
+        /// Toggles whether plane finding is enabled.
+        /// </summary>
+        [Tooltip("Toggles whether plane finding is enabled.")]
+        public bool EnablePlaneFinding = true;
+
+        /// <summary>
+        /// Toggles whether light estimation is enabled.
+        /// </summary>
+        [Tooltip("Toggles whether light estimation is enabled.")]
+        public bool EnableLightEstimation = true;
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 53ac32fab2599402fb6d154adf4c1e40
+timeCreated: 1510876906
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 141 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Anchor.cs

@@ -0,0 +1,141 @@
+//-----------------------------------------------------------------------
+// <copyright file="Anchor.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Diagnostics.CodeAnalysis;
+    using GoogleARCoreInternal;
+    using UnityEngine;
+
+    /// <summary>
+    /// Attaches a GameObject to an ARCore {@link Trackable}.  The transform of the GameObject will be updated to
+    /// maintain the semantics of the attachment relationship, which varies between sub-types of Trackable.
+    /// </summary>
+    public class Anchor : MonoBehaviour
+    {
+        private static Dictionary<IntPtr, Anchor> s_AnchorDict = new Dictionary<IntPtr, Anchor>();
+
+        private IntPtr m_AnchorNativeHandle = IntPtr.Zero;
+
+        private NativeSession m_NativeSession;
+
+        private TrackingState m_LastFrameTrackingState = TrackingState.Stopped;
+
+        /// <summary>
+        /// Gets the tracking state of the anchor.
+        /// </summary>
+        public TrackingState TrackingState
+        {
+            get
+            {
+                // TODO (b/73256094): Remove isTracking when fixed.
+                var nativeSession = LifecycleManager.Instance.NativeSession;
+                var isTracking = LifecycleManager.Instance.SessionStatus == SessionStatus.Tracking;
+                if (nativeSession != m_NativeSession)
+                {
+                    // Anchors from another session are considered stopped.
+                    return TrackingState.Stopped;
+                }
+                else if (!isTracking)
+                {
+                    // If there are no new frames coming in we must manually return paused.
+                    return TrackingState.Paused;
+                }
+
+                return m_NativeSession.AnchorApi.GetTrackingState(m_AnchorNativeHandle);
+            }
+        }
+
+        //// @cond EXCLUDE_FROM_DOXYGEN
+
+        [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented",
+        Justification = "Internal")]
+        public static Anchor AnchorFactory(IntPtr anchorNativeHandle, NativeSession nativeApi, bool isCreate = true)
+        {
+            if (anchorNativeHandle == IntPtr.Zero)
+            {
+                return null;
+            }
+
+            Anchor result;
+            if (s_AnchorDict.TryGetValue(anchorNativeHandle, out result))
+            {
+                // Release acquired handle and return cached result
+                result.m_NativeSession.AnchorApi.Release(anchorNativeHandle);
+                return result;
+            }
+
+            if (isCreate)
+            {
+               Anchor anchor = (new GameObject()).AddComponent<Anchor>();
+               anchor.gameObject.name = "Anchor";
+               anchor.m_AnchorNativeHandle = anchorNativeHandle;
+               anchor.m_NativeSession = nativeApi;
+               anchor.Update();
+
+               s_AnchorDict.Add(anchorNativeHandle, anchor);
+               return anchor;
+            }
+
+            return null;
+        }
+
+        //// @endcond
+
+        private void Update()
+        {
+            if (m_AnchorNativeHandle == IntPtr.Zero)
+            {
+                Debug.LogError("Anchor components instantiated outside of ARCore are not supported. " +
+                    "Please use a 'Create' method within ARCore to instantiate anchors.");
+                return;
+            }
+
+            var pose = m_NativeSession.AnchorApi.GetPose(m_AnchorNativeHandle);
+            transform.position = pose.position;
+            transform.rotation = pose.rotation;
+
+            TrackingState currentFrameTrackingState = TrackingState;
+            if (m_LastFrameTrackingState != currentFrameTrackingState)
+            {
+                bool isAnchorTracking = currentFrameTrackingState == TrackingState.Tracking;
+                foreach (Transform child in transform)
+                {
+                    child.gameObject.SetActive(isAnchorTracking);
+                }
+
+                m_LastFrameTrackingState = currentFrameTrackingState;
+            }
+        }
+
+        private void OnDestroy()
+        {
+            if (m_AnchorNativeHandle == IntPtr.Zero)
+            {
+                return;
+            }
+
+            s_AnchorDict.Remove(m_AnchorNativeHandle);
+            m_NativeSession.AnchorApi.Release(m_AnchorNativeHandle);
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Anchor.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: bd5c45a099b834b8d847a3ba64b2c8ec
+timeCreated: 1502157890
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -16000
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 181 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs

@@ -0,0 +1,181 @@
+//-----------------------------------------------------------------------
+// <copyright file="AndroidPermissionsManager.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using System;
+    using GoogleARCoreInternal;
+    using UnityEngine;
+
+    /// <summary>
+    /// Manages Android permissions for the Unity application.
+    /// </summary>
+    public class AndroidPermissionsManager : AndroidJavaProxy
+    {
+        private static AndroidPermissionsManager s_Instance;
+        private static AndroidJavaObject s_Activity;
+        private static AndroidJavaObject s_PermissionService;
+        private static AsyncTask<AndroidPermissionsRequestResult> s_CurrentRequest = null;
+        private static Action<AndroidPermissionsRequestResult> s_OnPermissionsRequestFinished;
+
+        /// @cond EXCLUDE_FROM_DOXYGEN
+        /// <summary>
+        /// Constructs a new AndroidPermissionsManager.
+        /// </summary>
+        public AndroidPermissionsManager() : base("com.unity3d.plugin.UnityAndroidPermissions$IPermissionRequestResult")
+        {
+        }
+
+        /// @endcond
+
+        /// <summary>
+        /// Checks if an Android permission is granted to the application.
+        /// </summary>
+        /// <param name="permissionName">The full name of the Android permission to check (e.g.
+        /// android.permission.CAMERA).</param>
+        /// <returns><c>true</c> if <c>permissionName</c> is granted to the application, otherwise
+        /// <c>false</c>.</returns>
+        public static bool IsPermissionGranted(string permissionName)
+        {
+            if (Application.isEditor)
+            {
+                return true;
+            }
+
+            return GetPermissionsService().Call<bool>("IsPermissionGranted", GetUnityActivity(), permissionName);
+        }
+
+        /// <summary>
+        /// Requests an Android permission from the user.
+        /// </summary>
+        /// <param name="permissionName">The permission to be requested (e.g. android.permission.CAMERA).</param>
+        /// <returns>An asynchronous task the completes when the user has accepted/rejected the requested permission
+        /// and yields a {@link AndroidPermissionsRequestResult} that summarizes the result.  If this method is called
+        /// when another permissions request is pending <c>null</c> will be returned instead.</returns>
+        public static AsyncTask<AndroidPermissionsRequestResult> RequestPermission(string permissionName)
+        {
+            if (AndroidPermissionsManager.IsPermissionGranted(permissionName))
+            {
+                return new AsyncTask<AndroidPermissionsRequestResult>(new AndroidPermissionsRequestResult(
+                    new string[] { permissionName }, new bool[] { true }));
+            }
+
+            if (s_CurrentRequest != null)
+            {
+                ARDebug.LogError("Attempted to make simultaneous Android permissions requests.");
+                return null;
+            }
+
+            GetPermissionsService().Call("RequestPermissionAsync", GetUnityActivity(),
+                new[] { permissionName }, GetInstance());
+            s_CurrentRequest = new AsyncTask<AndroidPermissionsRequestResult>(out s_OnPermissionsRequestFinished);
+
+            return s_CurrentRequest;
+        }
+
+        /// @cond EXCLUDE_FROM_DOXYGEN
+        /// <summary>
+        /// Callback fired when a permission is granted.
+        /// </summary>
+        /// <param name="permissionName">The name of the permission that was granted.</param>
+        public virtual void OnPermissionGranted(string permissionName)
+        {
+            _OnPermissionResult(permissionName, true);
+        }
+
+        /// @endcond
+
+        /// @cond EXCLUDE_FROM_DOXYGEN
+        /// <summary>
+        /// Callback fired when a permission is denied.
+        /// </summary>
+        /// <param name="permissionName">The name of the permission that was denied.</param>
+        public virtual void OnPermissionDenied(string permissionName)
+        {
+            _OnPermissionResult(permissionName, false);
+        }
+
+        /// @endcond
+
+        /// @cond EXCLUDE_FROM_DOXYGEN
+        /// <summary>
+        /// Callback fired on an Android activity result (unused part of UnityAndroidPermissions interface).
+        /// </summary>
+        public virtual void OnActivityResult()
+        {
+        }
+
+        private static AndroidPermissionsManager GetInstance()
+        {
+            if (s_Instance == null)
+            {
+                s_Instance = new AndroidPermissionsManager();
+            }
+
+            return s_Instance;
+        }
+
+        private static AndroidJavaObject GetUnityActivity()
+        {
+            if (s_Activity == null)
+            {
+                AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+                s_Activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
+            }
+
+            return s_Activity;
+        }
+
+        private static AndroidJavaObject GetPermissionsService()
+        {
+            if (s_PermissionService == null)
+            {
+                s_PermissionService = new AndroidJavaObject("com.unity3d.plugin.UnityAndroidPermissions");
+            }
+
+            return s_PermissionService;
+        }
+
+        /// @endcond
+
+        /// <summary>
+        /// Callback fired on an Android permission result.
+        /// </summary>
+        /// <param name="permissionName">The name of the permission.</param>
+        /// <param name="granted">If permission is granted or not.</param>
+        private void _OnPermissionResult(string permissionName, bool granted)
+        {
+            if (s_OnPermissionsRequestFinished == null)
+            {
+                Debug.LogErrorFormat("AndroidPermissionsManager received an unexpected permissions result {0}",
+                    permissionName);
+                return;
+            }
+
+            // Cache completion method and reset request state.
+            var onRequestFinished = s_OnPermissionsRequestFinished;
+            s_CurrentRequest = null;
+            s_OnPermissionsRequestFinished = null;
+
+            onRequestFinished(new AndroidPermissionsRequestResult(new string[] { permissionName },
+                new bool[] { granted }));
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: c0726c8b601b041069fad86754497703
+timeCreated: 1502330118
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 76 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsRequestResult.cs

@@ -0,0 +1,76 @@
+//-----------------------------------------------------------------------
+// <copyright file="AndroidPermissionsRequestResult.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+    using GoogleARCoreInternal;
+    using UnityEngine;
+
+    /// <summary>
+    /// Structure holding data summarizing the result of an Android permissions request.
+    /// </summary>
+    public struct AndroidPermissionsRequestResult
+    {
+        /// <summary>
+        /// Constructs a new AndroidPermissionsRequestResult.
+        /// </summary>
+        /// <param name="permissionNames">The value for PermissionNames.</param>
+        /// <param name="grantResults">The value for GrantResults.</param>
+        public AndroidPermissionsRequestResult(string[] permissionNames,  bool[] grantResults)
+        {
+            PermissionNames = permissionNames;
+            GrantResults = grantResults;
+        }
+
+        /// <summary>
+        /// Gets a collection of permissions requested.
+        /// </summary>
+        public string[] PermissionNames { get; private set; }
+
+        /// <summary>
+        /// Gets a collection of results corresponding to {@link PermissionNames}.
+        /// </summary>
+        public bool[] GrantResults { get; private set; }
+
+        /// <summary>
+        /// Gets a value indicating whether all permissions are granted.
+        /// </summary>
+        public bool IsAllGranted
+        {
+            get
+            {
+                if (PermissionNames == null || GrantResults == null)
+                {
+                    return false;
+                }
+
+                for (int i = 0; i < GrantResults.Length; i++)
+                {
+                    if (!GrantResults[i])
+                    {
+                        return false;
+                    }
+                }
+
+                return true;
+            }
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsRequestResult.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: d7676570d2869469a8e061cbd3d90c9f
+timeCreated: 1502330118
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 10 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 11813694e8abb437eb9ef46ed1cc67c5
+folderAsset: yes
+timeCreated: 1502400396
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 124 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api/AnchorApi.cs

@@ -0,0 +1,124 @@
+//-----------------------------------------------------------------------
+// <copyright file="AnchorApi.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Diagnostics.CodeAnalysis;
+    using System.Runtime.InteropServices;
+    using GoogleARCore;
+    using UnityEngine;
+
+    [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented",
+    Justification = "Internal")]
+    public class AnchorApi
+    {
+        private NativeSession m_NativeSession;
+
+        public AnchorApi(NativeSession nativeSession)
+        {
+            m_NativeSession = nativeSession;
+        }
+
+        public Pose GetPose(IntPtr anchorHandle)
+        {
+            var poseHandle = m_NativeSession.PoseApi.Create();
+            ExternApi.ArAnchor_getPose(m_NativeSession.SessionHandle, anchorHandle, poseHandle);
+            Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
+            m_NativeSession.PoseApi.Destroy(poseHandle);
+            return resultPose;
+        }
+
+        public TrackingState GetTrackingState(IntPtr anchorHandle)
+        {
+            ApiTrackingState trackingState = ApiTrackingState.Stopped;
+            ExternApi.ArAnchor_getTrackingState(m_NativeSession.SessionHandle, anchorHandle,
+                ref trackingState);
+            return trackingState.ToTrackingState();
+        }
+
+        public void Detach(IntPtr anchorHandle)
+        {
+            ExternApi.ArAnchor_detach(m_NativeSession.SessionHandle, anchorHandle);
+        }
+
+        public void Release(IntPtr anchorHandle)
+        {
+            ExternApi.ArAnchor_release(anchorHandle);
+        }
+
+        public IntPtr CreateList()
+        {
+            IntPtr listHandle = IntPtr.Zero;
+            ExternApi.ArAnchorList_create(m_NativeSession.SessionHandle, ref listHandle);
+            return listHandle;
+        }
+
+        public int GetListSize(IntPtr anchorListHandle)
+        {
+            int size = 0;
+            ExternApi.ArAnchorList_getSize(m_NativeSession.SessionHandle, anchorListHandle, ref size);
+            return size;
+        }
+
+        public IntPtr AcquireListItem(IntPtr anchorListHandle, int index)
+        {
+            IntPtr anchorHandle = IntPtr.Zero;
+            ExternApi.ArAnchorList_acquireItem(m_NativeSession.SessionHandle, anchorListHandle, index,
+                ref anchorHandle);
+            return anchorHandle;
+        }
+
+        public void DestroyList(IntPtr anchorListHandle)
+        {
+            ExternApi.ArAnchorList_destroy(anchorListHandle);
+        }
+
+        private struct ExternApi
+        {
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchor_getPose(IntPtr sessionHandle, IntPtr anchorHandle, IntPtr poseHandle);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchor_getTrackingState(IntPtr sessionHandle, IntPtr anchorHandle,
+                ref ApiTrackingState trackingState);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchor_detach(IntPtr sessionHandle, IntPtr anchorHandle);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchor_release(IntPtr anchorHandle);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchorList_create(IntPtr sessionHandle, ref IntPtr outputAnchorListHandle);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchorList_destroy(IntPtr anchorListHandle);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchorList_getSize(IntPtr sessionHandle, IntPtr anchorListHandle, ref int outputSize);
+
+            [DllImport(ApiConstants.ARCoreNativeApi)]
+            public static extern void ArAnchorList_acquireItem(IntPtr sessionHandle, IntPtr anchorListHandle,  int index,
+                ref IntPtr outputAnchorHandle);
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api/AnchorApi.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 0301646575b004ceca83800c3b3c9f06
+timeCreated: 1509305507
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 55 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallStatusExtensions.cs

@@ -0,0 +1,55 @@
+//-----------------------------------------------------------------------
+// <copyright file="ApiApkInstallStatusExtensions.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+    using System.Collections.Generic;
+    using System.Diagnostics.CodeAnalysis;
+    using GoogleARCore;
+
+    [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented",
+    Justification = "Internal")]
+    public static class ApiApkInstallStatusExtensions
+    {
+        public static ApkInstallationStatus ToApkInstallationStatus(this ApiApkInstallationStatus apiStatus)
+        {
+            switch (apiStatus)
+            {
+                case ApiApkInstallationStatus.Uninitialized:
+                    return ApkInstallationStatus.Uninitialized;
+                case ApiApkInstallationStatus.Requested:
+                    return ApkInstallationStatus.Requested;
+                case ApiApkInstallationStatus.Success:
+                    return ApkInstallationStatus.Success;
+                case ApiApkInstallationStatus.Error:
+                    return ApkInstallationStatus.Error;
+                case ApiApkInstallationStatus.ErrorDeviceNotCompatible:
+                    return ApkInstallationStatus.ErrorDeviceNotCompatible;
+                case ApiApkInstallationStatus.ErrorAndroidVersionNotSupported:
+                    return ApkInstallationStatus.ErrorAndroidVersionNotSupported;
+                case ApiApkInstallationStatus.ErrorUserDeclined:
+                    return ApkInstallationStatus.ErrorUserDeclined;
+                default:
+                    UnityEngine.Debug.LogErrorFormat("Unexpected ApiApkInstallStatus status {0}", apiStatus);
+                    return ApkInstallationStatus.Error;
+            }
+        }
+    }
+}

+ 13 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallStatusExtensions.cs.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 3345208dea93f4ca6a361f8852a87704
+timeCreated: 1517873495
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 37 - 0
citymodell/Assets/GoogleARCore/SDK/Scripts/Api/ApiApkInstallationStatus.cs

@@ -0,0 +1,37 @@
+//-----------------------------------------------------------------------
+// <copyright file="ApiApkInstallationStatus.cs" company="Google">
+//
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+    using System.Diagnostics.CodeAnalysis;
+
+    [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented",
+    Justification = "Internal")]
+    public enum ApiApkInstallationStatus
+    {
+        Uninitialized = 0,
+        Requested = 1,
+        Success = 100,
+        Error = 200,
+        ErrorDeviceNotCompatible = 201,
+        ErrorAndroidVersionNotSupported = 202,
+        ErrorUserDeclined = 203,
+    }
+}

Some files were not shown because too many files changed in this diff