Repository: NormandErwan/ArucoUnity Branch: master Commit: 757f5464267d Files: 311 Total size: 746.2 KB Directory structure: gitextract_ly7e1qln/ ├── .appveyor.yml ├── .editorconfig ├── .gitattributes ├── .gitignore ├── ArucoUnity.Editor.csproj ├── ArucoUnity.csproj ├── ArucoUnity.sln ├── Assets/ │ ├── ArucoUnity/ │ │ ├── Materials/ │ │ │ ├── Black.mat │ │ │ ├── Black.mat.meta │ │ │ ├── Blue.mat │ │ │ ├── Blue.mat.meta │ │ │ ├── Green.mat │ │ │ ├── Green.mat.meta │ │ │ ├── Red.mat │ │ │ ├── Red.mat.meta │ │ │ ├── TransparentRed.mat │ │ │ ├── TransparentRed.mat.meta │ │ │ ├── UnlitTexture.mat │ │ │ └── UnlitTexture.mat.meta │ │ ├── Materials.meta │ │ ├── Prefabs/ │ │ │ ├── Calibrations/ │ │ │ │ ├── ArucoCameraCalibrationGUI.prefab │ │ │ │ ├── ArucoCameraCalibrationGUI.prefab.meta │ │ │ │ ├── OmnidirCameraCalibration.prefab │ │ │ │ ├── OmnidirCameraCalibration.prefab.meta │ │ │ │ ├── PinholeCameraCalibration.prefab │ │ │ │ ├── PinholeCameraCalibration.prefab.meta │ │ │ │ ├── StereoOmnidirCameraCalibration.prefab │ │ │ │ ├── StereoOmnidirCameraCalibration.prefab.meta │ │ │ │ ├── StereoPinholeCameraCalibration.prefab │ │ │ │ └── StereoPinholeCameraCalibration.prefab.meta │ │ │ ├── Calibrations.meta │ │ │ ├── Cameras/ │ │ │ │ ├── ArucoWebcam.prefab │ │ │ │ ├── ArucoWebcam.prefab.meta │ │ │ │ ├── ArucoWebcamCalibrated.prefab │ │ │ │ ├── ArucoWebcamCalibrated.prefab.meta │ │ │ │ ├── StereoArucoWebcam.prefab │ │ │ │ ├── StereoArucoWebcam.prefab.meta │ │ │ │ ├── StereoArucoWebcamCalibrated.prefab │ │ │ │ └── StereoArucoWebcamCalibrated.prefab.meta │ │ │ ├── Cameras.meta │ │ │ ├── Objects/ │ │ │ │ ├── ArucoObjectsTracker.prefab │ │ │ │ └── ArucoObjectsTracker.prefab.meta │ │ │ ├── Objects.meta │ │ │ ├── Resources/ │ │ │ │ ├── ArucoObjectDisplayerImagePlane.prefab │ │ │ │ └── ArucoObjectDisplayerImagePlane.prefab.meta │ │ │ └── Resources.meta │ │ ├── Prefabs.meta │ │ ├── Scenes/ │ │ │ ├── CalibrateCamera.unity │ │ │ ├── CalibrateCamera.unity.meta │ │ │ ├── CreateMarkers.unity │ │ │ ├── CreateMarkers.unity.meta │ │ │ ├── TrackMarkers.unity │ │ │ └── TrackMarkers.unity.meta │ │ ├── Scenes.meta │ │ ├── Scripts/ │ │ │ ├── Calibrations/ │ │ │ │ ├── ArucoCameraCalibration.cs │ │ │ │ ├── ArucoCameraCalibration.cs.meta │ │ │ │ ├── ArucoCameraCalibrationGUI.cs │ │ │ │ ├── ArucoCameraCalibrationGUI.cs.meta │ │ │ │ ├── ArucoCameraCalibrationGeneric.cs │ │ │ │ ├── ArucoCameraCalibrationGeneric.cs.meta │ │ │ │ ├── CalibrationFlags.cs │ │ │ │ ├── CalibrationFlags.cs.meta │ │ │ │ ├── CalibrationFlagsGeneric.cs │ │ │ │ ├── CalibrationFlagsGeneric.cs.meta │ │ │ │ ├── Omnidir/ │ │ │ │ │ ├── OmnidirCameraCalibration.cs │ │ │ │ │ ├── OmnidirCameraCalibration.cs.meta │ │ │ │ │ ├── OmnidirCameraCalibrationFlags.cs │ │ │ │ │ ├── OmnidirCameraCalibrationFlags.cs.meta │ │ │ │ │ ├── StereoOmnidirCameraCalibration.cs │ │ │ │ │ └── StereoOmnidirCameraCalibration.cs.meta │ │ │ │ ├── Omnidir.meta │ │ │ │ ├── Pinhole/ │ │ │ │ │ ├── PinholeCameraCalibration.cs │ │ │ │ │ ├── PinholeCameraCalibration.cs.meta │ │ │ │ │ ├── PinholeCameraCalibrationBase.cs │ │ │ │ │ ├── PinholeCameraCalibrationBase.cs.meta │ │ │ │ │ ├── PinholeCameraCalibrationFlags.cs │ │ │ │ │ ├── PinholeCameraCalibrationFlags.cs.meta │ │ │ │ │ ├── StereoPinholeCameraCalibration.cs │ │ │ │ │ └── StereoPinholeCameraCalibration.cs.meta │ │ │ │ └── Pinhole.meta │ │ │ ├── Calibrations.meta │ │ │ ├── Cameras/ │ │ │ │ ├── ArucoCamera.cs │ │ │ │ ├── ArucoCamera.cs.meta │ │ │ │ ├── ArucoCameraController.cs │ │ │ │ ├── ArucoCameraController.cs.meta │ │ │ │ ├── ArucoWebcam.cs │ │ │ │ ├── ArucoWebcam.cs.meta │ │ │ │ ├── Displays/ │ │ │ │ │ ├── ArucoCameraDisplay.cs │ │ │ │ │ ├── ArucoCameraDisplay.cs.meta │ │ │ │ │ ├── ArucoCameraDisplayGeneric.cs │ │ │ │ │ ├── ArucoCameraDisplayGeneric.cs.meta │ │ │ │ │ ├── IArucoCameraDisplay.cs │ │ │ │ │ ├── IArucoCameraDisplay.cs.meta │ │ │ │ │ ├── MonoArucoCameraDisplay.cs │ │ │ │ │ ├── MonoArucoCameraDisplay.cs.meta │ │ │ │ │ ├── StereoArucoCameraDisplay.cs │ │ │ │ │ ├── StereoArucoCameraDisplay.cs.meta │ │ │ │ │ ├── StereoVRArucoCameraDisplay.cs │ │ │ │ │ └── StereoVRArucoCameraDisplay.cs.meta │ │ │ │ ├── Displays.meta │ │ │ │ ├── IArucoCamera.cs │ │ │ │ ├── IArucoCamera.cs.meta │ │ │ │ ├── IArucoCameraController.cs │ │ │ │ ├── IArucoCameraController.cs.meta │ │ │ │ ├── Parameters/ │ │ │ │ │ ├── ArucoCameraParameters.cs │ │ │ │ │ ├── ArucoCameraParameters.cs.meta │ │ │ │ │ ├── ArucoCameraParametersController.cs │ │ │ │ │ ├── ArucoCameraParametersController.cs.meta │ │ │ │ │ ├── ArucoStereoCameraParameters.cs │ │ │ │ │ ├── ArucoStereoCameraParameters.cs.meta │ │ │ │ │ ├── IHasArucoCameraParameters.cs │ │ │ │ │ └── IHasArucoCameraParameters.cs.meta │ │ │ │ ├── Parameters.meta │ │ │ │ ├── StereoArucoCamera.cs │ │ │ │ ├── StereoArucoCamera.cs.meta │ │ │ │ ├── StereoArucoWebcam.cs │ │ │ │ ├── StereoArucoWebcam.cs.meta │ │ │ │ ├── Undistortions/ │ │ │ │ │ ├── ArucoCameraUndistortion.cs │ │ │ │ │ ├── ArucoCameraUndistortion.cs.meta │ │ │ │ │ ├── ArucoCameraUndistortionGeneric.cs │ │ │ │ │ ├── ArucoCameraUndistortionGeneric.cs.meta │ │ │ │ │ ├── IArucoCameraUndistortion.cs │ │ │ │ │ ├── IArucoCameraUndistortion.cs.meta │ │ │ │ │ ├── Omnidir/ │ │ │ │ │ │ ├── OmnidirCameraUndistortion.cs │ │ │ │ │ │ ├── OmnidirCameraUndistortion.cs.meta │ │ │ │ │ │ ├── OmnidirCameraUndistortionGeneric.cs │ │ │ │ │ │ ├── OmnidirCameraUndistortionGeneric.cs.meta │ │ │ │ │ │ ├── StereoOmnidirCameraUndistortion.cs │ │ │ │ │ │ └── StereoOmnidirCameraUndistortion.cs.meta │ │ │ │ │ ├── Omnidir.meta │ │ │ │ │ ├── Pinhole/ │ │ │ │ │ │ ├── PinholeCameraUndistortion.cs │ │ │ │ │ │ ├── PinholeCameraUndistortion.cs.meta │ │ │ │ │ │ ├── PinholeCameraUndistortionGeneric.cs │ │ │ │ │ │ ├── PinholeCameraUndistortionGeneric.cs.meta │ │ │ │ │ │ ├── StereoPinholeCameraUndistortion.cs │ │ │ │ │ │ └── StereoPinholeCameraUndistortion.cs.meta │ │ │ │ │ └── Pinhole.meta │ │ │ │ └── Undistortions.meta │ │ │ ├── Cameras.meta │ │ │ ├── Controller.cs │ │ │ ├── Controller.cs.meta │ │ │ ├── IController.cs │ │ │ ├── IController.cs.meta │ │ │ ├── Objects/ │ │ │ │ ├── ArucoBoard.cs │ │ │ │ ├── ArucoBoard.cs.meta │ │ │ │ ├── ArucoCharucoBoard.cs │ │ │ │ ├── ArucoCharucoBoard.cs.meta │ │ │ │ ├── ArucoDiamond.cs │ │ │ │ ├── ArucoDiamond.cs.meta │ │ │ │ ├── ArucoGridBoard.cs │ │ │ │ ├── ArucoGridBoard.cs.meta │ │ │ │ ├── ArucoMarker.cs │ │ │ │ ├── ArucoMarker.cs.meta │ │ │ │ ├── ArucoObject.cs │ │ │ │ ├── ArucoObject.cs.meta │ │ │ │ ├── Displayers/ │ │ │ │ │ ├── ArucoObjectCreator.cs │ │ │ │ │ ├── ArucoObjectCreator.cs.meta │ │ │ │ │ ├── ArucoObjectDisplayer.cs │ │ │ │ │ └── ArucoObjectDisplayer.cs.meta │ │ │ │ ├── Displayers.meta │ │ │ │ ├── Trackers/ │ │ │ │ │ ├── ArucoCharucoBoardTracker.cs │ │ │ │ │ ├── ArucoCharucoBoardTracker.cs.meta │ │ │ │ │ ├── ArucoDiamondTracker.cs │ │ │ │ │ ├── ArucoDiamondTracker.cs.meta │ │ │ │ │ ├── ArucoGridBoardTracker.cs │ │ │ │ │ ├── ArucoGridBoardTracker.cs.meta │ │ │ │ │ ├── ArucoMarkerTracker.cs │ │ │ │ │ ├── ArucoMarkerTracker.cs.meta │ │ │ │ │ ├── ArucoObjectDetector.cs │ │ │ │ │ ├── ArucoObjectDetector.cs.meta │ │ │ │ │ ├── ArucoObjectTracker.cs │ │ │ │ │ ├── ArucoObjectTracker.cs.meta │ │ │ │ │ ├── ArucoObjectsController.cs │ │ │ │ │ ├── ArucoObjectsController.cs.meta │ │ │ │ │ ├── ArucoObjectsTracker.cs │ │ │ │ │ ├── ArucoObjectsTracker.cs.meta │ │ │ │ │ ├── DetectorParametersController.cs │ │ │ │ │ ├── DetectorParametersController.cs.meta │ │ │ │ │ ├── IArucoObjectsController.cs │ │ │ │ │ ├── IArucoObjectsController.cs.meta │ │ │ │ │ ├── IArucoObjectsTracker.cs │ │ │ │ │ ├── IArucoObjectsTracker.cs.meta │ │ │ │ │ ├── IHasDetectorParameter.cs │ │ │ │ │ └── IHasDetectorParameter.cs.meta │ │ │ │ └── Trackers.meta │ │ │ ├── Objects.meta │ │ │ ├── Plugins/ │ │ │ │ ├── Aruco/ │ │ │ │ │ ├── Aruco.cs │ │ │ │ │ ├── Aruco.cs.meta │ │ │ │ │ ├── Board.cs │ │ │ │ │ ├── Board.cs.meta │ │ │ │ │ ├── CharucoBoard.cs │ │ │ │ │ ├── CharucoBoard.cs.meta │ │ │ │ │ ├── DetectorParameters.cs │ │ │ │ │ ├── DetectorParameters.cs.meta │ │ │ │ │ ├── Dictionary.cs │ │ │ │ │ ├── Dictionary.cs.meta │ │ │ │ │ ├── GridBoard.cs │ │ │ │ │ └── GridBoard.cs.meta │ │ │ │ ├── Aruco.meta │ │ │ │ ├── Cv/ │ │ │ │ │ ├── Calib3d.cs │ │ │ │ │ ├── Calib3d.cs.meta │ │ │ │ │ ├── Ccalib.cs │ │ │ │ │ ├── Ccalib.cs.meta │ │ │ │ │ ├── Core.cs │ │ │ │ │ ├── Core.cs.meta │ │ │ │ │ ├── Exception.cs │ │ │ │ │ ├── Exception.cs.meta │ │ │ │ │ ├── Imgproc.cs │ │ │ │ │ ├── Imgproc.cs.meta │ │ │ │ │ ├── Mat.cs │ │ │ │ │ ├── Mat.cs.meta │ │ │ │ │ ├── Point2f.cs │ │ │ │ │ ├── Point2f.cs.meta │ │ │ │ │ ├── Point3f.cs │ │ │ │ │ ├── Point3f.cs.meta │ │ │ │ │ ├── Rect.cs │ │ │ │ │ ├── Rect.cs.meta │ │ │ │ │ ├── Scalar.cs │ │ │ │ │ ├── Scalar.cs.meta │ │ │ │ │ ├── Size.cs │ │ │ │ │ ├── Size.cs.meta │ │ │ │ │ ├── TermCriteria.cs │ │ │ │ │ ├── TermCriteria.cs.meta │ │ │ │ │ ├── Vec3d.cs │ │ │ │ │ ├── Vec3d.cs.meta │ │ │ │ │ ├── Vec4i.cs │ │ │ │ │ └── Vec4i.cs.meta │ │ │ │ ├── Cv.meta │ │ │ │ ├── HandleCppPtr.cs │ │ │ │ ├── HandleCppPtr.cs.meta │ │ │ │ ├── Std/ │ │ │ │ │ ├── VectorDouble.cs │ │ │ │ │ ├── VectorDouble.cs.meta │ │ │ │ │ ├── VectorInt.cs │ │ │ │ │ ├── VectorInt.cs.meta │ │ │ │ │ ├── VectorMat.cs │ │ │ │ │ ├── VectorMat.cs.meta │ │ │ │ │ ├── VectorPoint2f.cs │ │ │ │ │ ├── VectorPoint2f.cs.meta │ │ │ │ │ ├── VectorPoint3f.cs │ │ │ │ │ ├── VectorPoint3f.cs.meta │ │ │ │ │ ├── VectorVec3d.cs │ │ │ │ │ ├── VectorVec3d.cs.meta │ │ │ │ │ ├── VectorVec4i.cs │ │ │ │ │ ├── VectorVec4i.cs.meta │ │ │ │ │ ├── VectorVectorInt.cs │ │ │ │ │ ├── VectorVectorInt.cs.meta │ │ │ │ │ ├── VectorVectorPoint2f.cs │ │ │ │ │ ├── VectorVectorPoint2f.cs.meta │ │ │ │ │ ├── VectorVectorPoint3f.cs │ │ │ │ │ ├── VectorVectorPoint3f.cs.meta │ │ │ │ │ ├── VectorVectorVectorPoint2f.cs │ │ │ │ │ └── VectorVectorVectorPoint2f.cs.meta │ │ │ │ └── Std.meta │ │ │ ├── Plugins.meta │ │ │ ├── Utilities/ │ │ │ │ ├── ArucoCameraSeparateThread.cs │ │ │ │ ├── ArucoCameraSeparateThread.cs.meta │ │ │ │ ├── CvMatExtensions.cs │ │ │ │ ├── CvMatExtensions.cs.meta │ │ │ │ ├── WebcamController.cs │ │ │ │ └── WebcamController.cs.meta │ │ │ └── Utilities.meta │ │ ├── Scripts.meta │ │ ├── Textures/ │ │ │ └── BlackPixel.png.meta │ │ └── Textures.meta │ ├── ArucoUnity.meta │ ├── Editor/ │ │ ├── ExportArucoUnityPackage.cs │ │ └── ExportArucoUnityPackage.cs.meta │ ├── Editor.meta │ ├── StreamingAssets/ │ │ ├── ArucoUnity/ │ │ │ ├── ArucoWebcamExample.xml │ │ │ ├── ArucoWebcamExample.xml.meta │ │ │ ├── StereoArucoWebcamExample.xml │ │ │ └── StereoArucoWebcamExample.xml.meta │ │ └── ArucoUnity.meta │ ├── StreamingAssets.meta │ ├── csc.rsp │ ├── csc.rsp.meta │ ├── gmcs.rsp │ ├── gmcs.rsp.meta │ ├── mcs.rsp │ ├── mcs.rsp.meta │ ├── smcs.rsp │ └── smcs.rsp.meta ├── Documentation/ │ ├── docfx.json │ ├── filterConfig.yml │ ├── manual/ │ │ ├── aruco-unity-architecture.md │ │ ├── build-from-sources.md │ │ ├── calibrate-a-camera.md │ │ ├── create-markers.md │ │ ├── toc.yml │ │ └── track-markers.md │ ├── toc.yml │ └── xrefmap.yml ├── LICENSE ├── ProjectSettings/ │ ├── AudioManager.asset │ ├── ClusterInputManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── NavMeshAreas.asset │ ├── NetworkManager.asset │ ├── Physics2DSettings.asset │ ├── PresetManager.asset │ ├── ProjectSettings.asset │ ├── ProjectVersion.txt │ ├── QualitySettings.asset │ ├── TagManager.asset │ ├── TimeManager.asset │ └── UnityConnectSettings.asset └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .appveyor.yml ================================================ environment: git_user_email: normand.erwan@protonmail.com git_user_name: NormandErwan auth_token: secure: rAvGzxn8QfY9CapiOocIVsgDya7dnnh3bRzxAGDntS8axguyhTt1nyH7przrm3LF install: choco install docfx -y build_script: # Inspired by: https://github.com/docascode/docfx-seed/blob/master/appveyor.yml - ps: | copy README.md Documentation\index.md docfx Documentation\docfx.json if ($lastexitcode -ne 0) { throw [System.Exception] "docfx build failed with exit code $lastexitcode." } git clone https://github.com/NormandErwan/ArucoUnity -b gh-pages gh-pages -q Remove-Item gh-pages\* -recurse Copy-Item _site\* gh-pages -recurse git config --global credential.helper store Add-Content "$env:USERPROFILE\.git-credentials" "https://$($env:auth_token):x-oauth-basic@github.com`n" git config --global user.email $env:git_user_email git config --global user.name $env:git_user_name cd gh-pages git add -A | out-null git commit -m "Documentation update" -q git push origin gh-pages -q ================================================ FILE: .editorconfig ================================================ root = true [*] end_of_line = lf [*.{compute,cs,hlsl,xml}] indent_style = space indent_size = 4 trim_trailing_whitespace = true [*.cs] # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#normalize_modifiers dotnet_style_require_accessibility_modifiers = always:warning csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:warning dotnet_style_readonly_field = true:warning # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#parentheses dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#expression_level dotnet_style_prefer_auto_properties = true:suggestion dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#implicit-and-explicit-types csharp_style_var_for_built_in_types = false:warning csharp_style_var_when_type_is_apparent = true:suggestion # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#code_block csharp_prefer_braces = true:warning # See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#wrapping csharp_preserve_single_line_statements = false ## Styles dotnet_naming_style.pascal_case_style.capitalization = pascal_case dotnet_naming_style.camel_case_style.capitalization = camel_case dotnet_naming_style.interfaces_style.capitalization = pascal_case dotnet_naming_style.interfaces_style.required_prefix = I ## Symbols # Suppress: EC114 # The EditorConfig extension is not up to date dotnet_naming_symbols.pascal_case_symbols.applicable_kinds = namespace, class, struct, enum, property, method, event, delegate dotnet_naming_symbols.pascal_case_symbols.applicable_accessibilities = * dotnet_naming_symbols.const_static_fields.applicable_kinds = field dotnet_naming_symbols.const_static_fields.applicable_accessibilities = * dotnet_naming_symbols.const_static_fields.required_modifiers = const, static dotnet_naming_symbols.camel_case_symbols.applicable_kinds = field, parameter dotnet_naming_symbols.camel_case_symbols.applicable_accessibilities = * dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_symbols.interfaces.applicable_accessibilities = * ## Rules dotnet_naming_rule.pascal_case_naming.symbols = pascal_case_symbols dotnet_naming_rule.pascal_case_naming.style = pascal_case_style dotnet_naming_rule.pascal_case_naming.severity = warning dotnet_naming_rule.static_fields_naming.symbols = const_static_fields dotnet_naming_rule.static_fields_naming.style = pascal_case_style dotnet_naming_rule.static_fields_naming.severity = warning dotnet_naming_rule.camel_case_naming.symbols = camel_case_symbols dotnet_naming_rule.camel_case_naming.style = camel_case_style dotnet_naming_rule.camel_case_naming.severity = warning dotnet_naming_rule.interfaces_naming.symbols = interfaces dotnet_naming_rule.interfaces_naming.style = interfaces_style dotnet_naming_rule.interfaces_naming.severity = warning ================================================ FILE: .gitattributes ================================================ * text=auto .gitignore text *.asset text eol=crlf *.cs text diff=csharp *.json text *.mat text eol=crlf *.md text *.meta text eol=crlf *.prefab text eol=crlf *.rsp text eol=crlf *.txt text *.xml text diff=html *.yml text Packages/** text eol=crlf *.gif binary *.jpg binary *.png binary *.unity binary ================================================ FILE: .gitignore ================================================ # ArucoUnity **/Assets/ArucoUnity/Images* **/Assets/ArucoUnity/Calibrations* **/Assets/ArucoUnity/CameraParameters* **/Assets/ArucoUnity/Plugins* # Documentation Documentation/api/ Documentation/index.* _site/ Assets/**/obj* # OS and IDEs *.sublime-* .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes .vscode # Unity [Ll]ibrary/ [Tt]emp/ [Oo]bj/ [Bb]uild/ [Bb]uilds/ Assets/AssetStoreTools* UnityPackageManager/* Packages/* ## Visual Studio cache directory .vs/ ## Autogenerated VS/MD/Consulo solution and project files ExportedObj/ .consulo/ #*.csproj *.unityproj #*.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj *.svd *.pdb *.opendb ## Unity3D generated meta files *.pidb.meta *.pdb.meta ## Unity3D Generated File On Crash Reports sysinfo.txt ## Builds *.apk *.unitypackage ================================================ FILE: ArucoUnity.Editor.csproj ================================================  Debug AnyCPU 10.0.20506 2.0 {D0E49199-C143-EDFC-AC89-62E94AD9FAA0} Library Assembly-CSharp-Editor 512 {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} .NETFramework v4.6 Editor:5 StandaloneWindows64:19 2017.4.14f1 6 true true false pdbonly false Temp\UnityVS_bin\Debug\ Temp\UnityVS_obj\Debug\ prompt 4 DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU; true pdbonly false Temp\UnityVS_bin\Release\ Temp\UnityVS_obj\Release\ prompt 4 TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU; true C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\mscorlib.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.XML.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Core.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\Microsoft.CSharp.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Runtime.Serialization.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Xml.Linq.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/Editor/UnityEditor.UIAutomation.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.Graphs.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/PlaybackEngines/windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll C:/Program Files (x86)/Microsoft Visual Studio Tools for Unity/15.0/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/Editor/UnityEditor.Analytics.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/Editor/UnityEditor.Purchasing.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll {DF8C363E-9189-BE3F-CC58-F45623E9217A} ArucoUnity ================================================ FILE: ArucoUnity.csproj ================================================  Debug AnyCPU 10.0.20506 2.0 {DF8C363E-9189-BE3F-CC58-F45623E9217A} Library Assembly-CSharp 512 {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} .NETFramework v4.6 Game:1 StandaloneWindows64:19 2017.4.14f1 6 true true false pdbonly false Temp\UnityVS_bin\Debug\ Temp\UnityVS_obj\Debug\ prompt 4 DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU; true pdbonly false Temp\UnityVS_bin\Release\ Temp\UnityVS_obj\Release\ prompt 4 TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU; true C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\mscorlib.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.XML.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Core.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\Microsoft.CSharp.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Runtime.Serialization.dll C:\Program Files\Unity\Hub\Editor\2017.4.14f1\Editor\Data\MonoBleedingEdge\lib\mono\4.6-api\System.Xml.Linq.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll ================================================ FILE: ArucoUnity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2017 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArucoUnity", "ArucoUnity.csproj", "{DF8C363E-9189-BE3F-CC58-F45623E9217A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArucoUnity.Editor", "ArucoUnity.Editor.csproj", "{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DF8C363E-9189-BE3F-CC58-F45623E9217A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF8C363E-9189-BE3F-CC58-F45623E9217A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DF8C363E-9189-BE3F-CC58-F45623E9217A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF8C363E-9189-BE3F-CC58-F45623E9217A}.Release|Any CPU.Build.0 = Release|Any CPU {D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Debug|Any CPU.Build.0 = Debug|Any CPU {D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Assets/ArucoUnity/Materials/Black.mat ================================================ %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: Black m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _EMISSION m_LightmapFlags: 1 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.695 - _GlossyReflections: 1 - _Metallic: 0.707 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 1 m_Colors: - _Color: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ================================================ FILE: Assets/ArucoUnity/Materials/Black.mat.meta ================================================ fileFormatVersion: 2 guid: 6190c33accc60224bbb0454dd4be9685 timeCreated: 1484160421 licenseType: Free NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials/Blue.mat ================================================ %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: Blue m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _EMISSION m_LightmapFlags: 1 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: 0.14318116, g: 0.11678202, b: 0.88235295, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ================================================ FILE: Assets/ArucoUnity/Materials/Blue.mat.meta ================================================ fileFormatVersion: 2 guid: c90c33d2d9c0e54409acab106b4326fd timeCreated: 1484090184 licenseType: Free NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials/Green.mat ================================================ %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: Green m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _EMISSION m_LightmapFlags: 1 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: 0.26816607, g: 0.85294116, b: 0.037629742, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ================================================ FILE: Assets/ArucoUnity/Materials/Green.mat.meta ================================================ fileFormatVersion: 2 guid: 34e890fc50f03814daac3dd16e73b140 timeCreated: 1484090078 licenseType: Free NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials/Red.mat ================================================ %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: Red m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _EMISSION m_LightmapFlags: 1 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: 0.83823526, g: 0.049307954, b: 0.049307954, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ================================================ FILE: Assets/ArucoUnity/Materials/Red.mat.meta ================================================ fileFormatVersion: 2 guid: edff0e56dd5f1424688617c697177ece timeCreated: 1484090179 licenseType: Free NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials/TransparentRed.mat ================================================ %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: TransparentRed m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _EMISSION m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: 3000 stringTagMap: RenderType: Transparent 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: 10 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 - _Metallic: 0 - _Mode: 3 - _OcclusionStrength: 1 - _Parallax: 0.02 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 0 m_Colors: - _Color: {r: 1, g: 0, b: 0, a: 0.19607843} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} ================================================ FILE: Assets/ArucoUnity/Materials/TransparentRed.mat.meta ================================================ fileFormatVersion: 2 guid: ce995bb8fb0591f419ea7d43d1199afe timeCreated: 1477406477 licenseType: Pro NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials/UnlitTexture.mat ================================================ %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: UnlitTexture m_Shader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0} m_ShaderKeywords: _EMISSION m_LightmapFlags: 1 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: 2800000, guid: d263dba086ea0a8469cbf24719fc7002, type: 3} 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} ================================================ FILE: Assets/ArucoUnity/Materials/UnlitTexture.mat.meta ================================================ fileFormatVersion: 2 guid: a937e1f0eb227c44ebbdf6578da8c572 timeCreated: 1479757966 licenseType: Pro NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Materials.meta ================================================ fileFormatVersion: 2 guid: 9f23006cfd1f3bd4987f776e583ad967 folderAsset: yes timeCreated: 1477406462 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/ArucoCameraCalibrationGUI.prefab ================================================ %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: 1522649181537600} m_IsPrefabParent: 1 --- !u!1 &1204266652295122 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224597920615529612} - component: {fileID: 114749267454286240} m_Layer: 0 m_Name: CalibrationButtons m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1240726913532800 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224128273805902562} - component: {fileID: 222882260662199102} - component: {fileID: 114957343417044190} m_Layer: 0 m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1286907453202508 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224456132469896268} - component: {fileID: 222754602470142944} - component: {fileID: 114803774593854036} - component: {fileID: 114449490830645698} - component: {fileID: 114734750577440894} m_Layer: 0 m_Name: ResetButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1287661284403720 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224089052195935730} - component: {fileID: 222336901271446468} - component: {fileID: 114689996810644530} - component: {fileID: 114363236922486004} - component: {fileID: 114797022340791080} m_Layer: 0 m_Name: AddImagesButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1299933135069082 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224455664766988868} m_Layer: 0 m_Name: ArucoCameraImages m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1331403283991896 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224870151546417610} - component: {fileID: 222396420443960968} - component: {fileID: 114023500679225480} - component: {fileID: 114943742696020814} - component: {fileID: 114504283703635730} m_Layer: 0 m_Name: CalibrateButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1374436642224286 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224500930484029984} - component: {fileID: 222673927580719158} - component: {fileID: 114043367593250692} m_Layer: 0 m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1522649181537600 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224187818345042460} - component: {fileID: 223287078443635166} - component: {fileID: 114375293875652280} - component: {fileID: 114559322710731554} - component: {fileID: 114680838840418534} m_Layer: 0 m_Name: ArucoCameraCalibrationGUI m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1645301085675522 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224354081902056526} - component: {fileID: 222397243288984880} - component: {fileID: 114480577296959298} - component: {fileID: 114411881691531006} m_Layer: 0 m_Name: ImagesCountText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1649973171149934 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224816888888654422} - component: {fileID: 222888581635740192} - component: {fileID: 114139504794437290} m_Layer: 0 m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1703110363387122 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 224190136141352184} - component: {fileID: 222981599754570666} - component: {fileID: 114390200818231822} - component: {fileID: 114428696961855108} m_Layer: 0 m_Name: CalibrationStatusText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &114023500679225480 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1331403283991896} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 --- !u!114 &114043367593250692 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1374436642224286} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 15 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 m_MaxSize: 40 m_Alignment: 4 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: Calibrate --- !u!114 &114139504794437290 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649973171149934} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 15 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 m_MaxSize: 40 m_Alignment: 4 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: Add Images --- !u!114 &114363236922486004 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1287661284403720} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} m_Transition: 1 m_Colors: m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed m_DisabledTrigger: Disabled m_Interactable: 1 m_TargetGraphic: {fileID: 114689996810644530} m_OnClick: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null --- !u!114 &114375293875652280 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522649181537600} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 m_ReferenceResolution: {x: 800, y: 600} m_ScreenMatchMode: 0 m_MatchWidthOrHeight: 0.5 m_PhysicalUnit: 3 m_FallbackScreenDPI: 96 m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 --- !u!114 &114390200818231822 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1703110363387122} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 15 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 m_MaxSize: 40 m_Alignment: 0 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 'Calibration status : stopped' --- !u!114 &114411881691531006 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1645301085675522} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 m_MinWidth: -1 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: 60 m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 --- !u!114 &114428696961855108 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1703110363387122} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 m_MinWidth: -1 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: 60 m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 --- !u!114 &114449490830645698 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1286907453202508} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} m_Transition: 1 m_Colors: m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed m_DisabledTrigger: Disabled m_Interactable: 1 m_TargetGraphic: {fileID: 114803774593854036} m_OnClick: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null --- !u!114 &114480577296959298 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1645301085675522} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 15 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 m_MaxSize: 40 m_Alignment: 0 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 'Images count: 000' --- !u!114 &114504283703635730 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1331403283991896} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 m_MinWidth: -1 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: 30 m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 --- !u!114 &114559322710731554 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522649181537600} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreReversedGraphics: 1 m_BlockingObjects: 0 m_BlockingMask: serializedVersion: 2 m_Bits: 4294967295 --- !u!114 &114680838840418534 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522649181537600} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: ede7fb9eabbd29442941c6491f769102, type: 3} m_Name: m_EditorClassIdentifier: arucoCameraCalibration: {fileID: 0} arucoCameraImagesRect: {fileID: 224455664766988868} addImagesButton: {fileID: 114363236922486004} imagesCountText: {fileID: 114480577296959298} calibrateButton: {fileID: 114943742696020814} calibrationStatusText: {fileID: 114390200818231822} resetButton: {fileID: 114449490830645698} --- !u!114 &114689996810644530 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1287661284403720} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 --- !u!114 &114734750577440894 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1286907453202508} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 1 m_MinWidth: -1 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: -1 m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 --- !u!114 &114749267454286240 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1204266652295122} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: m_Left: 5 m_Right: 5 m_Top: 5 m_Bottom: 5 m_ChildAlignment: 0 m_Spacing: 10 m_ChildForceExpandWidth: 1 m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 1 --- !u!114 &114797022340791080 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1287661284403720} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 m_MinWidth: -1 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: 30 m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 --- !u!114 &114803774593854036 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1286907453202508} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 --- !u!114 &114943742696020814 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1331403283991896} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} m_Transition: 1 m_Colors: m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} m_PressedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: m_NormalTrigger: Normal m_HighlightedTrigger: Highlighted m_PressedTrigger: Pressed m_DisabledTrigger: Disabled m_Interactable: 1 m_TargetGraphic: {fileID: 114023500679225480} m_OnClick: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null --- !u!114 &114957343417044190 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1240726913532800} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 15 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 m_MaxSize: 40 m_Alignment: 4 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: Reset --- !u!222 &222336901271446468 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1287661284403720} --- !u!222 &222396420443960968 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1331403283991896} --- !u!222 &222397243288984880 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1645301085675522} --- !u!222 &222673927580719158 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1374436642224286} --- !u!222 &222754602470142944 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1286907453202508} --- !u!222 &222882260662199102 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1240726913532800} --- !u!222 &222888581635740192 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649973171149934} --- !u!222 &222981599754570666 CanvasRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1703110363387122} --- !u!223 &223287078443635166 Canvas: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522649181537600} m_Enabled: 1 serializedVersion: 3 m_RenderMode: 0 m_Camera: {fileID: 0} m_PlaneDistance: 100 m_PixelPerfect: 0 m_ReceivesEvents: 1 m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 --- !u!224 &224089052195935730 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1287661284403720} 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: 224816888888654422} m_Father: {fileID: 224597920615529612} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!224 &224128273805902562 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1240726913532800} 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: 224456132469896268} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224187818345042460 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522649181537600} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - {fileID: 224455664766988868} - {fileID: 224597920615529612} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} --- !u!224 &224190136141352184 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1703110363387122} 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: 224597920615529612} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!224 &224354081902056526 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1645301085675522} 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: 224597920615529612} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!224 &224455664766988868 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1299933135069082} 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: 224187818345042460} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: -67.5, y: 0} m_SizeDelta: {x: -135, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224456132469896268 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1286907453202508} 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: 224128273805902562} m_Father: {fileID: 224597920615529612} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} m_AnchoredPosition: {x: 0, y: 5} m_SizeDelta: {x: -10, y: 30} m_Pivot: {x: 0.5, y: 0} --- !u!224 &224500930484029984 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1374436642224286} 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: 224870151546417610} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224597920615529612 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1204266652295122} 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: 224089052195935730} - {fileID: 224354081902056526} - {fileID: 224870151546417610} - {fileID: 224190136141352184} - {fileID: 224456132469896268} m_Father: {fileID: 224187818345042460} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 135, y: 0} m_Pivot: {x: 1, y: 0.5} --- !u!224 &224816888888654422 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649973171149934} 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: 224089052195935730} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224870151546417610 RectTransform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1331403283991896} 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: 224500930484029984} m_Father: {fileID: 224597920615529612} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/ArucoCameraCalibrationGUI.prefab.meta ================================================ fileFormatVersion: 2 guid: 7d56e1e25cfe0d746a30e519e829f8e6 timeCreated: 1510855839 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/OmnidirCameraCalibration.prefab ================================================ %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: 1831836218230788} m_IsPrefabParent: 1 --- !u!1 &1831836218230788 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4153927219464056} - component: {fileID: 114218203924508940} - component: {fileID: 114900348844413008} - component: {fileID: 114758305632993188} - component: {fileID: 114449972534273376} m_Layer: 0 m_Name: OmnidirCameraCalibration m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4153927219464056 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1831836218230788} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114218203924508940 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1831836218230788} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4b6859419089da74a90f9ad6387a7983, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 detectorParametersController: {fileID: 114900348844413008} calibrationBoard: {fileID: 0} refineMarkersDetection: 0 cameraParametersController: {fileID: 114758305632993188} arucoCamera: {fileID: 0} calibrationFlags: {fileID: 114449972534273376} --- !u!114 &114449972534273376 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1831836218230788} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4cfa914475d82db49b6f0d7f57d13438, type: 3} m_Name: m_EditorClassIdentifier: useIntrinsicGuess: 0 fixKDistorsionCoefficients: 0000 fixSkew: 0 fixP: 0000 fixXi: 0 fixGamma: 0 fixCenter: 0 --- !u!114 &114758305632993188 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1831836218230788} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 0 cameraParametersFolderPath: ArucoUnity/CameraParameters/ cameraParametersFilename: --- !u!114 &114900348844413008 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1831836218230788} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3} m_Name: m_EditorClassIdentifier: adaptiveThreshWinSizeMin: 3 adaptiveThreshWinSizeMax: 23 adaptiveThreshWinSizeStep: 10 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.03 maxMarkerPerimeterRate: 4 polygonalApproxAccuracyRate: 0.03 minCornerDistanceRate: 0.05 minDistanceToBorder: 3 minMarkerDistanceRate: 0.05 cornerRefinementMethod: 0 cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.35 minOtsuStdDev: 5 errorCorrectionRate: 0.6 ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/OmnidirCameraCalibration.prefab.meta ================================================ fileFormatVersion: 2 guid: d9192212aa3edd94c8f032782c211dd7 timeCreated: 1510855992 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/PinholeCameraCalibration.prefab ================================================ %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: 1379392284713990} m_IsPrefabParent: 1 --- !u!1 &1379392284713990 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4443830380264692} - component: {fileID: 114208106215188584} - component: {fileID: 114479760342518650} - component: {fileID: 114381304389912768} - component: {fileID: 114472875458148954} m_Layer: 0 m_Name: PinholeCameraCalibration m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4443830380264692 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1379392284713990} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114208106215188584 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1379392284713990} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a8936dfef56ecc642bce8962a9434dd2, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 detectorParametersController: {fileID: 114479760342518650} calibrationBoard: {fileID: 0} refineMarkersDetection: 0 cameraParametersController: {fileID: 114381304389912768} arucoCamera: {fileID: 0} calibrationFlags: {fileID: 114472875458148954} --- !u!114 &114381304389912768 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1379392284713990} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 0 cameraParametersFolderPath: ArucoUnity/CameraParameters/ cameraParametersFilename: --- !u!114 &114472875458148954 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1379392284713990} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 44099b4ed8318e845a10ed126f62bbe2, type: 3} m_Name: m_EditorClassIdentifier: useIntrinsicGuess: 0 fixKDistorsionCoefficients: 000000000000 fixPrincipalPoint: 0 fixAspectRatio: 0 fixAspectRatioValue: 1 zeroTangentialDistorsion: 0 rationalModel: 0 thinPrismModel: 0 fixS1_S2_S3_S4: 0 tiltedModel: 0 fixTauxTauy: 0 fixFocalLength: 0 fixIntrinsic: 1 sameFocalLength: 0 --- !u!114 &114479760342518650 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1379392284713990} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3} m_Name: m_EditorClassIdentifier: adaptiveThreshWinSizeMin: 3 adaptiveThreshWinSizeMax: 23 adaptiveThreshWinSizeStep: 10 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.03 maxMarkerPerimeterRate: 4 polygonalApproxAccuracyRate: 0.03 minCornerDistanceRate: 0.05 minDistanceToBorder: 3 minMarkerDistanceRate: 0.05 cornerRefinementMethod: 0 cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.35 minOtsuStdDev: 5 errorCorrectionRate: 0.6 ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/PinholeCameraCalibration.prefab.meta ================================================ fileFormatVersion: 2 guid: 33877b17cdcf7334bbd2152625efad87 timeCreated: 1510855570 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/StereoOmnidirCameraCalibration.prefab ================================================ %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: 1796862874369070} m_IsPrefabParent: 1 --- !u!1 &1796862874369070 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4771018156846152} - component: {fileID: 114717443885570236} - component: {fileID: 114566421423305350} - component: {fileID: 114562014380628764} - component: {fileID: 114202863759725284} m_Layer: 0 m_Name: StereoOmnidirCameraCalibration m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4771018156846152 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1796862874369070} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114202863759725284 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1796862874369070} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4cfa914475d82db49b6f0d7f57d13438, type: 3} m_Name: m_EditorClassIdentifier: useIntrinsicGuess: 0 fixKDistorsionCoefficients: 0000 fixSkew: 0 fixP: 0000 fixXi: 0 fixGamma: 0 fixCenter: 0 --- !u!114 &114562014380628764 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1796862874369070} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 0 cameraParametersFolderPath: ArucoUnity/CameraParameters/ cameraParametersFilename: --- !u!114 &114566421423305350 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1796862874369070} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3} m_Name: m_EditorClassIdentifier: adaptiveThreshWinSizeMin: 3 adaptiveThreshWinSizeMax: 23 adaptiveThreshWinSizeStep: 10 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.03 maxMarkerPerimeterRate: 4 polygonalApproxAccuracyRate: 0.03 minCornerDistanceRate: 0.05 minDistanceToBorder: 3 minMarkerDistanceRate: 0.05 cornerRefinementMethod: 0 cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.35 minOtsuStdDev: 5 errorCorrectionRate: 0.6 --- !u!114 &114717443885570236 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1796862874369070} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e66674f2448052d4eaf3e9159a923d7b, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 detectorParametersController: {fileID: 114566421423305350} calibrationBoard: {fileID: 0} refineMarkersDetection: 0 cameraParametersController: {fileID: 114562014380628764} arucoCamera: {fileID: 0} calibrationFlags: {fileID: 114202863759725284} ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/StereoOmnidirCameraCalibration.prefab.meta ================================================ fileFormatVersion: 2 guid: a4c21835cfef5a24ea2dc1e73e31831a timeCreated: 1511911175 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/StereoPinholeCameraCalibration.prefab ================================================ %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: 1063750291374120} m_IsPrefabParent: 1 --- !u!1 &1063750291374120 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4646850064639340} - component: {fileID: 114854326495929632} - component: {fileID: 114659781309666906} - component: {fileID: 114304372869992102} - component: {fileID: 114591552896006750} m_Layer: 0 m_Name: StereoPinholeCameraCalibration m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4646850064639340 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1063750291374120} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114304372869992102 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1063750291374120} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 0 cameraParametersFolderPath: ArucoUnity/CameraParameters/ cameraParametersFilename: --- !u!114 &114591552896006750 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1063750291374120} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 44099b4ed8318e845a10ed126f62bbe2, type: 3} m_Name: m_EditorClassIdentifier: useIntrinsicGuess: 0 fixKDistorsionCoefficients: 000000000000 fixPrincipalPoint: 0 fixAspectRatio: 0 fixAspectRatioValue: 1 zeroTangentialDistorsion: 0 rationalModel: 0 thinPrismModel: 0 fixS1_S2_S3_S4: 0 tiltedModel: 0 fixTauxTauy: 0 fixFocalLength: 0 fixIntrinsic: 1 sameFocalLength: 0 --- !u!114 &114659781309666906 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1063750291374120} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3} m_Name: m_EditorClassIdentifier: adaptiveThreshWinSizeMin: 3 adaptiveThreshWinSizeMax: 23 adaptiveThreshWinSizeStep: 10 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.03 maxMarkerPerimeterRate: 4 polygonalApproxAccuracyRate: 0.03 minCornerDistanceRate: 0.05 minDistanceToBorder: 3 minMarkerDistanceRate: 0.05 cornerRefinementMethod: 0 cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.35 minOtsuStdDev: 5 errorCorrectionRate: 0.6 --- !u!114 &114854326495929632 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1063750291374120} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 64bcf1901ac9fc44d9bf16ca10a527bc, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 detectorParametersController: {fileID: 114659781309666906} calibrationBoard: {fileID: 0} refineMarkersDetection: 0 cameraParametersController: {fileID: 114304372869992102} arucoCamera: {fileID: 0} calibrationFlags: {fileID: 114591552896006750} ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations/StereoPinholeCameraCalibration.prefab.meta ================================================ fileFormatVersion: 2 guid: f29bf5ab542438248b4b92ce2d66226c timeCreated: 1511911128 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Calibrations.meta ================================================ fileFormatVersion: 2 guid: 50395ecfe36db934792734d18a600814 folderAsset: yes timeCreated: 1510937197 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcam.prefab ================================================ %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: 1748105045091876} m_IsPrefabParent: 1 --- !u!1 &1261977758904326 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4288362277056124} - component: {fileID: 20727044533785904} m_Layer: 0 m_Name: Camera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1283559168801520 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4586952474456608} - component: {fileID: 20164004177903186} m_Layer: 8 m_Name: BackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1649337208224828 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4398385686460268} - component: {fileID: 33080119040456864} - component: {fileID: 23193199916444832} m_Layer: 8 m_Name: Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1748105045091876 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4913347918360244} - component: {fileID: 114439970468321140} - component: {fileID: 114750514242914752} m_Layer: 0 m_Name: ArucoWebcam m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4288362277056124 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1261977758904326} 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: 4586952474456608} m_Father: {fileID: 4913347918360244} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4398385686460268 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649337208224828} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4586952474456608} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4586952474456608 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1283559168801520} 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: 4398385686460268} m_Father: {fileID: 4288362277056124} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4913347918360244 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1748105045091876} 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: 4288362277056124} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &20164004177903186 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1283559168801520} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 60 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 256 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20727044533785904 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1261977758904326} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 60 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!23 &23193199916444832 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649337208224828} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &33080119040456864 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1649337208224828} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &114439970468321140 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1748105045091876} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 webcamId: 0 --- !u!114 &114750514242914752 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1748105045091876} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 arucoCamera: {fileID: 114439970468321140} arucoCameraUndistortion: {fileID: 0} cameras: - {fileID: 20727044533785904} backgroundCameras: - {fileID: 20164004177903186} backgrounds: - {fileID: 23193199916444832} ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcam.prefab.meta ================================================ fileFormatVersion: 2 guid: 4c41cbbf88539e94fb09ee8c56317115 timeCreated: 1511290621 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcamCalibrated.prefab ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!1 &1136230013766202 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 4315490118085066} - component: {fileID: 20017792066165246} m_Layer: 8 m_Name: BackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4315490118085066 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1136230013766202} 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: 4239903939097252} m_Father: {fileID: 4388775592067208} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &20017792066165246 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1136230013766202} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_projectionMatrixMode: 1 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 60 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 256 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!1 &1354671515401654 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 4388775592067208} - component: {fileID: 20452962843750572} m_Layer: 0 m_Name: Camera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4388775592067208 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1354671515401654} 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: 4315490118085066} m_Father: {fileID: 4398985096809396} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &20452962843750572 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1354671515401654} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_projectionMatrixMode: 1 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 60 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!1 &1612154402523488 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 4239903939097252} - component: {fileID: 33133460080051478} - component: {fileID: 23646749236801090} m_Layer: 8 m_Name: Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4239903939097252 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1612154402523488} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4315490118085066} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &33133460080051478 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1612154402523488} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!23 &23646749236801090 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1612154402523488} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!1 &1647954469300956 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 4398985096809396} - component: {fileID: 114393126318706844} - component: {fileID: 114522793529101426} - component: {fileID: 114034833319431376} - component: {fileID: 114715581165667816} m_Layer: 0 m_Name: ArucoWebcamCalibrated m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4398985096809396 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647954469300956} 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: 4388775592067208} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114393126318706844 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647954469300956} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 webcamId: 0 --- !u!114 &114522793529101426 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647954469300956} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e044568ea72405e49bf56df52f9d2b57, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 CameraParametersController: {fileID: 114034833319431376} arucoCamera: {fileID: 114393126318706844} rectificationScalingFactor: 1 --- !u!114 &114034833319431376 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647954469300956} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 1 cameraParametersFilename: ArucoWebcamExample.xml --- !u!114 &114715581165667816 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647954469300956} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 arucoCamera: {fileID: 114393126318706844} arucoCameraUndistortion: {fileID: 114522793529101426} cameras: - {fileID: 20452962843750572} backgroundCameras: - {fileID: 20017792066165246} backgrounds: - {fileID: 23646749236801090} ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcamCalibrated.prefab.meta ================================================ fileFormatVersion: 2 guid: 74c9e29e9d222a4438669336303acc9a timeCreated: 1511290823 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab ================================================ %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: 1680325917346558} m_IsPrefabParent: 1 --- !u!1 &1073200431808850 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4284947067622318} - component: {fileID: 20290465642155780} m_Layer: 10 m_Name: RightBackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1151076865370966 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4595826776453472} - component: {fileID: 20349722883832606} m_Layer: 0 m_Name: LeftCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1162186642288042 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4850657905971360} - component: {fileID: 20500567986933980} m_Layer: 9 m_Name: LeftBackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1251459126816346 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4519361367992704} - component: {fileID: 20187879013153352} m_Layer: 0 m_Name: RightCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1522841342350734 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4387147391419430} m_Layer: 0 m_Name: RightEye m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1547205624705224 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4748822886841378} - component: {fileID: 33587181305577426} - component: {fileID: 23800773225864904} m_Layer: 9 m_Name: LeftBackground m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1680325917346558 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4313056539332356} - component: {fileID: 114778648834828408} - component: {fileID: 114909995311013256} m_Layer: 0 m_Name: StereoArucoWebcam m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1729213345586758 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4231375922267776} - component: {fileID: 33622920748448086} - component: {fileID: 23766359068007384} m_Layer: 10 m_Name: RightBackground m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1932795312337198 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4041434532156738} m_Layer: 0 m_Name: LeftEye m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4041434532156738 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1932795312337198} 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: 4595826776453472} - {fileID: 4850657905971360} m_Father: {fileID: 4313056539332356} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4231375922267776 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1729213345586758} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4284947067622318} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4284947067622318 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1073200431808850} 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: 4231375922267776} m_Father: {fileID: 4387147391419430} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4313056539332356 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1680325917346558} 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: 4041434532156738} - {fileID: 4387147391419430} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4387147391419430 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1522841342350734} 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: 4519361367992704} - {fileID: 4284947067622318} m_Father: {fileID: 4313056539332356} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4519361367992704 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1251459126816346} 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: 4387147391419430} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4595826776453472 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1151076865370966} 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: 4041434532156738} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4748822886841378 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1547205624705224} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4850657905971360} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4850657905971360 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1162186642288042} 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: 4748822886841378} m_Father: {fileID: 4041434532156738} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &20187879013153352 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1251459126816346} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0.5 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20290465642155780 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1073200431808850} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0.5 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 1024 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20349722883832606 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1151076865370966} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20500567986933980 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1162186642288042} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 512 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!23 &23766359068007384 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1729213345586758} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!23 &23800773225864904 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1547205624705224} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &33587181305577426 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1547205624705224} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!33 &33622920748448086 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1729213345586758} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &114778648834828408 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1680325917346558} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c82860b96c21f994bad617778c197a4b, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 webcamId1: 0 webcamId2: 1 --- !u!114 &114909995311013256 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1680325917346558} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3648ba3f74da4164db2b440ad0fbe471, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 arucoCamera: {fileID: 114778648834828408} arucoCameraUndistortion: {fileID: 0} leftEye: {fileID: 4041434532156738} rightEye: {fileID: 4387147391419430} leftCamera: {fileID: 20349722883832606} rightCamera: {fileID: 20187879013153352} leftBackgroundCamera: {fileID: 20500567986933980} rightBackgroundCamera: {fileID: 20290465642155780} leftBackground: {fileID: 23800773225864904} rightBackground: {fileID: 23766359068007384} ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab.meta ================================================ fileFormatVersion: 2 guid: 945ff4df30c179c41a817736618f3d97 timeCreated: 1511291280 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcamCalibrated.prefab ================================================ %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: 1207513600271448} m_IsPrefabParent: 1 --- !u!1 &1046713655620172 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4632313790216404} - component: {fileID: 20789227758116058} m_Layer: 0 m_Name: RightCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1146993183686178 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4031931371787320} - component: {fileID: 20888377950689166} m_Layer: 10 m_Name: RightBackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1207513600271448 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4377250107881252} - component: {fileID: 114992423418060336} - component: {fileID: 114987818737337706} - component: {fileID: 114125049629224730} - component: {fileID: 114332799581564012} m_Layer: 0 m_Name: StereoArucoWebcamCalibrated m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1236642361732716 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4420834919202464} - component: {fileID: 20908161906071312} m_Layer: 0 m_Name: LeftCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1279695010330344 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4522371770560156} - component: {fileID: 33776759295041006} - component: {fileID: 23896255257067098} m_Layer: 10 m_Name: RightBackground m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1288168834695990 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4544471706765170} m_Layer: 0 m_Name: RightEye m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1590203912225140 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4958998451253402} - component: {fileID: 20695146548642492} m_Layer: 9 m_Name: LeftBackgroundCamera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1663775939307562 GameObject: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4225388037717354} - component: {fileID: 33849455681176636} - component: {fileID: 23072473483236818} m_Layer: 9 m_Name: LeftBackground m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!1 &1800859393566362 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4944800623345314} m_Layer: 0 m_Name: LeftEye m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4031931371787320 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1146993183686178} 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: 4522371770560156} m_Father: {fileID: 4544471706765170} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4225388037717354 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1663775939307562} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4958998451253402} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4377250107881252 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1207513600271448} 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: 4944800623345314} - {fileID: 4544471706765170} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4420834919202464 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1236642361732716} 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: 4944800623345314} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4522371770560156 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1279695010330344} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 4031931371787320} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4544471706765170 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1288168834695990} 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: 4632313790216404} - {fileID: 4031931371787320} m_Father: {fileID: 4377250107881252} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4632313790216404 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1046713655620172} 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: 4544471706765170} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4944800623345314 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1800859393566362} 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: 4420834919202464} - {fileID: 4958998451253402} m_Father: {fileID: 4377250107881252} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &4958998451253402 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1590203912225140} 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: 4225388037717354} m_Father: {fileID: 4944800623345314} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &20695146548642492 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1590203912225140} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 512 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20789227758116058 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1046713655620172} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0.5 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20888377950689166 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1146993183686178} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0.5 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 1024 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!20 &20908161906071312 Camera: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1236642361732716} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 3 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 0.5 height: 1 near clip plane: 0.05 far clip plane: 1000 field of view: 106 orthographic: 0 orthographic size: 5 m_Depth: 1 m_CullingMask: serializedVersion: 2 m_Bits: 4294965503 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!23 &23072473483236818 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1663775939307562} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!23 &23896255257067098 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1279695010330344} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &33776759295041006 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1279695010330344} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!33 &33849455681176636 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1663775939307562} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!114 &114125049629224730 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1207513600271448} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: autoLoadFile: 1 cameraParametersFolderPath: ArucoUnity/CameraParameters/ cameraParametersFilename: --- !u!114 &114332799581564012 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1207513600271448} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3648ba3f74da4164db2b440ad0fbe471, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 arucoCamera: {fileID: 114992423418060336} arucoCameraUndistortion: {fileID: 114987818737337706} leftEye: {fileID: 4944800623345314} rightEye: {fileID: 4544471706765170} leftCamera: {fileID: 20908161906071312} rightCamera: {fileID: 20789227758116058} leftBackgroundCamera: {fileID: 20695146548642492} rightBackgroundCamera: {fileID: 20888377950689166} leftBackground: {fileID: 23072473483236818} rightBackground: {fileID: 23896255257067098} --- !u!114 &114987818737337706 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1207513600271448} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 41d0d6a753fcd62488e22edc074f8ac1, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 CameraParametersController: {fileID: 114125049629224730} arucoCamera: {fileID: 114992423418060336} rectificationScalingFactor: 1 rectificationZeroDisparity: 1 --- !u!114 &114992423418060336 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1207513600271448} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c82860b96c21f994bad617778c197a4b, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 webcamId1: 0 webcamId2: 1 ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcamCalibrated.prefab.meta ================================================ fileFormatVersion: 2 guid: 942eb6e885d3e5a4c8fece8e915aaeec timeCreated: 1511315597 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Cameras.meta ================================================ fileFormatVersion: 2 guid: ff2f2eeae2809444bbf44651446e1274 folderAsset: yes timeCreated: 1510937175 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Objects/ArucoObjectsTracker.prefab ================================================ %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: 1807315793213710} m_IsPrefabParent: 1 --- !u!1 &1807315793213710 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4105970446323926} - component: {fileID: 114704470919034220} - component: {fileID: 114710025698078358} m_Layer: 0 m_Name: ArucoObjectsTracker m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4105970446323926 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1807315793213710} 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 &114704470919034220 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1807315793213710} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 255fe063ecb04c04296ffd43ed49ae04, type: 3} m_Name: m_EditorClassIdentifier: autoStart: 1 detectorParametersController: {fileID: 114710025698078358} arucoObjects: [] arucoCamera: {fileID: 0} arucoCameraUndistortion: {fileID: 0} arucoCameraDisplay: {fileID: 0} refineDetectedMarkers: 1 drawDetectedMarkers: 1 drawRejectedCandidates: 0 drawAxes: 1 drawDetectedCharucoMarkers: 1 drawDetectedDiamonds: 1 --- !u!114 &114710025698078358 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1807315793213710} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3} m_Name: m_EditorClassIdentifier: adaptiveThreshWinSizeMin: 3 adaptiveThreshWinSizeMax: 23 adaptiveThreshWinSizeStep: 10 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.03 maxMarkerPerimeterRate: 4 polygonalApproxAccuracyRate: 0.03 minCornerDistanceRate: 0.05 minDistanceToBorder: 3 minMarkerDistanceRate: 0.05 cornerRefinementMethod: 0 cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.35 minOtsuStdDev: 5 errorCorrectionRate: 0.6 ================================================ FILE: Assets/ArucoUnity/Prefabs/Objects/ArucoObjectsTracker.prefab.meta ================================================ fileFormatVersion: 2 guid: 59dab6b4111ee0849bb667a5a1d298e5 timeCreated: 1486071190 licenseType: Free NativeFormatImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Objects.meta ================================================ fileFormatVersion: 2 guid: 9f23ccbb1ed2db94b9046b7a883bf55b folderAsset: yes timeCreated: 1511912336 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Resources/ArucoObjectDisplayerImagePlane.prefab ================================================ %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: 1391292684692634} m_IsPrefabParent: 1 --- !u!1 &1391292684692634 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} serializedVersion: 5 m_Component: - component: {fileID: 4510026625884806} - component: {fileID: 33356176765934348} - component: {fileID: 23136157643846576} m_Layer: 0 m_Name: ArucoObjectDisplayerImagePlane m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &4510026625884806 Transform: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1391292684692634} 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!23 &23136157643846576 MeshRenderer: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1391292684692634} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_Materials: - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!33 &33356176765934348 MeshFilter: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1391292684692634} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ================================================ FILE: Assets/ArucoUnity/Prefabs/Resources/ArucoObjectDisplayerImagePlane.prefab.meta ================================================ fileFormatVersion: 2 guid: 7c7e659188e1b824b9ad0499c7a03ddf timeCreated: 1509740627 licenseType: Free NativeFormatImporter: externalObjects: {} mainObjectFileID: 100100000 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs/Resources.meta ================================================ fileFormatVersion: 2 guid: 96c1e62b63a9a724094b69a77de592e0 folderAsset: yes timeCreated: 1509740599 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Prefabs.meta ================================================ fileFormatVersion: 2 guid: 55c70a4c2fd85d442b3e1d17bee5b0d3 folderAsset: yes timeCreated: 1472228400 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scenes/CalibrateCamera.unity ================================================ %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: 9 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.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !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: 10 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 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: 1 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: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 m_PVRFilteringGaussRadiusAO: 2 m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 0 --- !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 &316146149 Prefab: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - target: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: calibrationBoard value: objectReference: {fileID: 351674420} - target: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: arucoCamera value: objectReference: {fileID: 1260505090} - target: {fileID: 1379392284713990, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} m_IsPrefabParent: 0 --- !u!1 &351674418 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 351674421} - component: {fileID: 351674420} - component: {fileID: 351674419} m_Layer: 0 m_Name: ArucoCharucoBoard m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &351674419 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 351674418} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 351674420} displayInPlayMode: 0 --- !u!114 &351674420 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 351674418} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 2bd3bf3f4a191c04bb36564300e2e048, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 0.02 markerBorderBits: 1 marginsLength: 0 squaresNumberX: 7 squaresNumberY: 5 squareSideLength: 0.03 --- !u!4 &351674421 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 351674418} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.15, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &396612550 Prefab: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_SizeDelta.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: m_Pivot.y value: 0 objectReference: {fileID: 0} - target: {fileID: 114680838840418534, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} propertyPath: arucoCameraCalibration value: objectReference: {fileID: 1384223865} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2} m_IsPrefabParent: 0 --- !u!1 &885084650 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1880634248606826, guid: d080de5c598acdf45a91e38030d550ca, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 885084651} - component: {fileID: 885084653} - component: {fileID: 885084652} m_Layer: 0 m_Name: EventSystem m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &885084651 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4664256286994920, guid: d080de5c598acdf45a91e38030d550ca, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 885084650} 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: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &885084652 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114846588469736492, guid: d080de5c598acdf45a91e38030d550ca, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 885084650} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit m_CancelButton: Cancel m_InputActionsPerSecond: 10 m_RepeatDelay: 0.5 m_ForceModuleActive: 0 --- !u!114 &885084653 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114460208098437732, guid: d080de5c598acdf45a91e38030d550ca, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 885084650} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: m_FirstSelected: {fileID: 0} m_sendNavigationEvents: 1 m_DragThreshold: 5 --- !u!1001 &1260505089 Prefab: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - target: {fileID: 1748105045091876, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_Name value: ArucoWebcam objectReference: {fileID: 0} - target: {fileID: 114750514242914752, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: autoStart value: 0 objectReference: {fileID: 0} - target: {fileID: 1748105045091876, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} m_IsPrefabParent: 0 --- !u!114 &1260505090 stripped MonoBehaviour: m_PrefabParentObject: {fileID: 114439970468321140, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2} m_PrefabInternal: {fileID: 1260505089} m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3} --- !u!1 &1382217299 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1382217303} - component: {fileID: 1382217302} - component: {fileID: 1382217301} - component: {fileID: 1382217300} m_Layer: 0 m_Name: Camera m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!81 &1382217300 AudioListener: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1382217299} m_Enabled: 1 --- !u!124 &1382217301 Behaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1382217299} m_Enabled: 1 --- !u!20 &1382217302 Camera: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1382217299} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.3 far clip plane: 1000 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!4 &1382217303 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1382217299} 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 &1384223865 stripped MonoBehaviour: m_PrefabParentObject: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87, type: 2} m_PrefabInternal: {fileID: 316146149} m_Script: {fileID: 11500000, guid: a8936dfef56ecc642bce8962a9434dd2, type: 3} --- !u!1 &1501240522 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1501240525} - component: {fileID: 1501240524} - component: {fileID: 1501240523} m_Layer: 0 m_Name: ArucoGridBoard m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &1501240523 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1501240522} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1501240524} displayInPlayMode: 0 --- !u!114 &1501240524 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1501240522} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 0.03 markerBorderBits: 1 marginsLength: 0 markersNumberX: 7 markersNumberY: 5 markerSeparation: 0.0075 --- !u!4 &1501240525 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1501240522} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.15, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1885516630 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1885516632} - component: {fileID: 1885516631} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!108 &1885516631 Light: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1885516630} m_Enabled: 1 serializedVersion: 8 m_Type: 1 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 m_CookieSize: 10 m_Shadows: m_Type: 2 m_Resolution: -1 m_CustomResolution: -1 m_Strength: 1 m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} m_RenderMode: 0 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 m_Lightmapping: 4 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &1885516632 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1885516630} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ================================================ FILE: Assets/ArucoUnity/Scenes/CalibrateCamera.unity.meta ================================================ fileFormatVersion: 2 guid: 8c301b55ddf701049a329b61f6faeca0 timeCreated: 1511295879 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scenes/CreateMarkers.unity ================================================ %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.44657898, g: 0.4964133, b: 0.5748178, 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: 1 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: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 m_PVRFilteringGaussRadiusAO: 2 m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 0 --- !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!1 &36187169 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 36187171} - component: {fileID: 36187170} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!108 &36187170 Light: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 36187169} m_Enabled: 1 serializedVersion: 8 m_Type: 1 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 m_CookieSize: 10 m_Shadows: m_Type: 2 m_Resolution: -1 m_CustomResolution: -1 m_Strength: 1 m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} m_RenderMode: 0 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 m_Lightmapping: 4 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &36187171 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 36187169} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &270237207 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 270237210} - component: {fileID: 270237209} - component: {fileID: 270237208} m_Layer: 0 m_Name: Marker_Dict5x5_50_Id_0 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &270237208 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 270237207} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 4 markerSideLength: 200 markerBorderBits: 1 markerId: 0 --- !u!114 &270237209 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 270237207} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 270237208} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_Dict5x5_50_Id_0 --- !u!4 &270237210 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 270237207} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.6, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &831758188 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 831758189} - component: {fileID: 831758191} - component: {fileID: 831758190} m_Layer: 0 m_Name: Marker_Dict4x4_1000_Id_999 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &831758189 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 831758188} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.3, y: 0, z: 0.008} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &831758190 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 831758188} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 3 markerSideLength: 200 markerBorderBits: 1 markerId: 999 --- !u!114 &831758191 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 831758188} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 831758190} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_Dict4x4_1000_Id_999 --- !u!1 &1004230723 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1004230729} - component: {fileID: 1004230728} - component: {fileID: 1004230726} m_Layer: 0 m_Name: GridBoard_Dict4x4_50_X_7_Y_5_MarkerSize_160 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &1004230726 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114579816594623442, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1004230723} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 120 markerBorderBits: 1 marginsLength: 0 markersNumberX: 7 markersNumberY: 5 markerSeparation: 50 --- !u!114 &1004230728 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1004230723} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1004230726} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_GridBoard_Dict4x4_50_X_7_Y_5_MarkerSize_120 --- !u!4 &1004230729 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1004230723} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -1.5, y: 0, z: 0.4} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1148141135 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1148141138} - component: {fileID: 1148141137} - component: {fileID: 1148141136} m_Layer: 0 m_Name: 'ChArUcoBoard_Dict4x4_50_X_7_Y_5_SquareSize_200_MarkerSize_120 ' m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &1148141136 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114913003422248120, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1148141135} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 2bd3bf3f4a191c04bb36564300e2e048, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 120 markerBorderBits: 1 marginsLength: 0 squaresNumberX: 7 squaresNumberY: 5 squareSideLength: 200 --- !u!114 &1148141137 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1148141135} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1148141136} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_ChArUcoBoard_Dict4x4_50_X_7_Y_5_SquareSize_200_MarkerSize_120 --- !u!4 &1148141138 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1148141135} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -1.5, y: 0, z: 1.5} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1192287920 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1192287921} - component: {fileID: 1192287923} - component: {fileID: 1192287922} m_Layer: 0 m_Name: Marker_Dict6x6_50_Id_0 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1192287921 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1192287920} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.3} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1192287922 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1192287920} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 8 markerSideLength: 200 markerBorderBits: 1 markerId: 0 --- !u!114 &1192287923 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1192287920} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1192287922} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_Dict6x6_50_Id_0 --- !u!1 &1247465583 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1247465584} - component: {fileID: 1247465586} - component: {fileID: 1247465585} m_Layer: 0 m_Name: Marker_DictArucoOriginal_Id_0 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1247465584 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1247465583} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.6, y: 0, z: 0.3} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1247465585 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1247465583} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 16 markerSideLength: 200 markerBorderBits: 1 markerId: 0 --- !u!114 &1247465586 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1247465583} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1247465585} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_DictArucoOriginal_Id_0 --- !u!1 &1264974610 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1264974611} - component: {fileID: 1264974613} - component: {fileID: 1264974612} m_Layer: 0 m_Name: DiamondMarker_Dict5x5_50_Ids_1_2_3_4_SquareSize_200_MarkerSize_150 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1264974611 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1264974610} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.3, y: 0, z: 1.7} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1264974612 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114608679655634988, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1264974610} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 4 markerSideLength: 150 markerBorderBits: 0 squareSideLength: 200 marker1Id: 1 marker2Id: 2 marker3Id: 3 marker4Id: 4 --- !u!114 &1264974613 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1264974610} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1264974612} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_DiamondMarker_Dict5x5_50_Ids_1_2_3_4_SquareSize_200_MarkerSize_150 --- !u!1 &1374276491 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1374276492} - component: {fileID: 1374276494} - component: {fileID: 1374276493} m_Layer: 0 m_Name: DiamondMarker_Dict4x4_50_Ids_36_37_38_39_SquareSize_200_MarkerSize_120 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1374276492 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1374276491} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.3, y: 0, z: 0.9} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1374276493 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114608679655634988, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1374276491} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 120 markerBorderBits: 0 squareSideLength: 200 marker1Id: 36 marker2Id: 37 marker3Id: 38 marker4Id: 39 --- !u!114 &1374276494 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1374276491} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1374276493} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_DiamondMarker_Dict4x4_50_Ids_36_37_38_39_SquareSize_200_MarkerSize_120 --- !u!1 &1422556659 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1422556660} - component: {fileID: 1422556662} - component: {fileID: 1422556661} m_Layer: 0 m_Name: Marker_Dict7x7_50_Id_0 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1422556660 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1422556659} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.3, y: 0, z: 0.3} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1422556661 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1422556659} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 12 markerSideLength: 200 markerBorderBits: 1 markerId: 0 --- !u!114 &1422556662 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1422556659} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1422556661} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_Dict7x7_50_Id_0 --- !u!1 &1775526413 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1775526416} - component: {fileID: 1775526415} - component: {fileID: 1775526414} m_Layer: 0 m_Name: Marker_Dict4x4_50_Id_0 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &1775526414 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1775526413} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 200 markerBorderBits: 1 markerId: 0 --- !u!114 &1775526415 MonoBehaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1775526413} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 1775526414} displayInPlayMode: 1 autoSaveInPlayMode: 1 outputFolder: ArucoUnity/Images/ automaticFilename: 1 imageFilename: ArUcoUnity_Marker_Dict4x4_50_Id_0 --- !u!4 &1775526416 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2, type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1775526413} 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: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1890850132 GameObject: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} serializedVersion: 5 m_Component: - component: {fileID: 1890850137} - component: {fileID: 1890850136} - component: {fileID: 1890850134} - component: {fileID: 1890850133} m_Layer: 0 m_Name: Camera m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!81 &1890850133 AudioListener: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1890850132} m_Enabled: 1 --- !u!124 &1890850134 Behaviour: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1890850132} m_Enabled: 1 --- !u!20 &1890850136 Camera: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1890850132} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 m_BackGroundColor: {r: 0.2352941, g: 0.2352941, b: 0.2352941, a: 0} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 near clip plane: 0.3 far clip plane: 1000 field of view: 90.8 orthographic: 1 orthographic size: 1.2 m_Depth: -1 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 m_TargetEye: 0 m_HDR: 0 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 --- !u!4 &1890850137 Transform: m_ObjectHideFlags: 0 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1890850132} m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: -1, y: 2, z: 1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ================================================ FILE: Assets/ArucoUnity/Scenes/CreateMarkers.unity.meta ================================================ fileFormatVersion: 2 guid: 5180c8d10bf8d1e4cb9c678d70a60e60 timeCreated: 1523627494 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scenes/TrackMarkers.unity ================================================ %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: 9 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.44657874, g: 0.49641258, b: 0.5748172, a: 1} m_UseRadianceAmbientProbe: 0 --- !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_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_LightmapEditorSettings: serializedVersion: 10 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 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: 1 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: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 m_PVRFilteringGaussRadiusAO: 2 m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 0 --- !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!1 &88552867 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 88552868} - component: {fileID: 88552871} - component: {fileID: 88552870} - component: {fileID: 88552869} m_Layer: 0 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &88552868 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 88552867} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.0215, z: 0} m_LocalScale: {x: 0.349, y: 0.043, z: 0.247} m_Children: [] m_Father: {fileID: 910886727} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &88552869 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 88552867} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!65 &88552870 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 88552867} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &88552871 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 88552867} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &101226251 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1178669336944490, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 101226252} m_Layer: 0 m_Name: Axes m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &101226252 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4521172703693674, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 101226251} 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: 739589397} - {fileID: 431576766} - {fileID: 1647296277} - {fileID: 934518934} m_Father: {fileID: 136054458} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &136054457 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 136054458} - component: {fileID: 136054461} - component: {fileID: 136054460} - component: {fileID: 136054459} m_Layer: 0 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &136054458 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136054457} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.027, z: 0} m_LocalScale: {x: 0.054, y: 0.054, z: 0.054} m_Children: - {fileID: 101226252} m_Father: {fileID: 887812764} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &136054459 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136054457} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!65 &136054460 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136054457} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &136054461 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136054457} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &373694447 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 373694449} - component: {fileID: 373694448} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!108 &373694448 Light: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 373694447} m_Enabled: 1 serializedVersion: 8 m_Type: 1 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 2 m_Range: 10 m_SpotAngle: 30 m_CookieSize: 10 m_Shadows: m_Type: 2 m_Resolution: -1 m_CustomResolution: -1 m_Strength: 1 m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} m_RenderMode: 0 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 m_Lightmapping: 4 m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &373694449 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 373694447} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &431576765 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1687848253974514, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 431576766} - component: {fileID: 431576769} - component: {fileID: 431576768} - component: {fileID: 431576767} m_Layer: 0 m_Name: Yaxis m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &431576766 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4012611428924082, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 431576765} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.02, y: 0.5, z: 0.02} m_Children: [] m_Father: {fileID: 101226252} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &431576767 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 23002387428412198, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 431576765} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 34e890fc50f03814daac3dd16e73b140, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!136 &431576768 CapsuleCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 136718255651014494, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 431576765} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 m_Radius: 0.5 m_Height: 2 m_Direction: 1 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &431576769 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 33736080738166530, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 431576765} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &606566497 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 606566500} - component: {fileID: 606566499} - component: {fileID: 606566498} m_Layer: 0 m_Name: ArucoDiamond Dict5x5_50 Ids_1_2_3_4 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &606566498 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 606566497} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 606566499} displayInPlayMode: 1 --- !u!114 &606566499 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 606566497} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 4 markerSideLength: 0.0315 markerBorderBits: 1 squareSideLength: 0.042 marker1Id: 1 marker2Id: 2 marker3Id: 3 marker4Id: 4 --- !u!4 &606566500 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 606566497} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.2, y: 0, z: -0.35} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 848024234} m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &739589396 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1013998643351052, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 739589397} - component: {fileID: 739589400} - component: {fileID: 739589399} - component: {fileID: 739589398} m_Layer: 0 m_Name: Xaxis m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &739589397 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4913306099320574, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 739589396} m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: -0.7071068} m_LocalPosition: {x: 0.5, y: -0.5, z: 0} m_LocalScale: {x: 0.02, y: 0.5000003, z: 0.02} m_Children: [] m_Father: {fileID: 101226252} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 270} --- !u!23 &739589398 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 23021429105240008, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 739589396} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: edff0e56dd5f1424688617c697177ece, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!136 &739589399 CapsuleCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 136191313221229334, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 739589396} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 m_Radius: 0.5 m_Height: 2 m_Direction: 1 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &739589400 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 33203559360702468, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 739589396} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &848024233 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 848024234} - component: {fileID: 848024237} - component: {fileID: 848024236} - component: {fileID: 848024235} m_Layer: 0 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &848024234 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 848024233} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.021, z: 0} m_LocalScale: {x: 0.126, y: 0.042, z: 0.126} m_Children: [] m_Father: {fileID: 606566500} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &848024235 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 848024233} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!65 &848024236 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 848024233} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &848024237 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 848024233} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &887812762 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1000012123911946, guid: f6fe6e660eed5c04aa2fe97712d889fa, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 887812764} - component: {fileID: 887812763} - component: {fileID: 887812765} m_Layer: 0 m_Name: ArucoMarker Dict4x4_50 Id_35 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &887812763 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887812762} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 0.054 markerBorderBits: 1 markerId: 35 --- !u!4 &887812764 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4000010362706424, guid: f6fe6e660eed5c04aa2fe97712d889fa, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887812762} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -0.3} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 136054458} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &887812765 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887812762} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 887812763} displayInPlayMode: 1 --- !u!1001 &904118489 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 1807315793213710, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoObjects.Array.size value: 3 objectReference: {fileID: 0} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: cameraParametersController value: objectReference: {fileID: 1994956398} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoCamera value: objectReference: {fileID: 1994956400} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoObjects.Array.data[0] value: objectReference: {fileID: 887812763} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoObjects.Array.data[1] value: objectReference: {fileID: 910886726} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoObjects.Array.data[2] value: objectReference: {fileID: 606566499} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoCameraUndistortion value: objectReference: {fileID: 1994956401} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: arucoCameraDisplay value: objectReference: {fileID: 1994956399} - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_Enabled value: 1 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3} --- !u!1 &910886724 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 910886727} - component: {fileID: 910886726} - component: {fileID: 910886725} m_Layer: 0 m_Name: ArucoGridBoard Dict4x4_50 X_7 Y_5 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!114 &910886725 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 910886724} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3} m_Name: m_EditorClassIdentifier: arucoObject: {fileID: 910886726} displayInPlayMode: 1 --- !u!114 &910886726 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 910886724} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3} m_Name: m_EditorClassIdentifier: dictionaryName: 0 markerSideLength: 0.043 markerBorderBits: 1 marginsLength: 0 markersNumberX: 7 markersNumberY: 5 markerSeparation: 0.008 --- !u!4 &910886727 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 910886724} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.1, y: 0, z: -0.1} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 88552868} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &934518933 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1229604647514558, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 934518934} - component: {fileID: 934518937} - component: {fileID: 934518936} - component: {fileID: 934518935} m_Layer: 0 m_Name: SphereOrigin m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &934518934 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4653367363216972, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 934518933} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: -0.5, z: 0} m_LocalScale: {x: 0.050000004, y: 0.050000004, z: 0.050000004} m_Children: [] m_Father: {fileID: 101226252} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &934518935 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 23512743496046622, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 934518933} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 6190c33accc60224bbb0454dd4be9685, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!135 &934518936 SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 135369509157430370, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 934518933} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &934518937 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 33722364558535698, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 934518933} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1647296276 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1558730765965760, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1647296277} - component: {fileID: 1647296280} - component: {fileID: 1647296279} - component: {fileID: 1647296278} m_Layer: 0 m_Name: Zaxis m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 --- !u!4 &1647296277 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4286828002999784, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647296276} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalPosition: {x: 0, y: -0.5, z: 0.5} m_LocalScale: {x: 0.02, y: 0.5000003, z: 0.02} m_Children: [] m_Father: {fileID: 101226252} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!23 &1647296278 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 23870921209229818, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647296276} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: c90c33d2d9c0e54409acab106b4326fd, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 m_StaticBatchRoot: {fileID: 0} m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 m_SelectedEditorRenderState: 3 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 --- !u!136 &1647296279 CapsuleCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 136576069785485510, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647296276} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 m_Radius: 0.5 m_Height: 2 m_Direction: 1 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1647296280 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 33715997917883156, guid: 14c7f77cb24accb4baeeff031365afe4, type: 2} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647296276} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1994956397 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 1647954469300956, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_Name value: ArucoWebcamCalibrated objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} --- !u!114 &1994956398 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114034833319431376, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} m_PrefabInstance: {fileID: 1994956397} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3} m_Name: m_EditorClassIdentifier: --- !u!114 &1994956399 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114715581165667816, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} m_PrefabInstance: {fileID: 1994956397} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3} m_Name: m_EditorClassIdentifier: --- !u!114 &1994956400 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114393126318706844, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} m_PrefabInstance: {fileID: 1994956397} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3} m_Name: m_EditorClassIdentifier: --- !u!114 &1994956401 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114522793529101426, guid: 74c9e29e9d222a4438669336303acc9a, type: 3} m_PrefabInstance: {fileID: 1994956397} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e044568ea72405e49bf56df52f9d2b57, type: 3} m_Name: m_EditorClassIdentifier: ================================================ FILE: Assets/ArucoUnity/Scenes/TrackMarkers.unity.meta ================================================ fileFormatVersion: 2 guid: 6607aee97cfd1034bacf07d7d3978cae timeCreated: 1489692878 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scenes.meta ================================================ fileFormatVersion: 2 guid: 8c3ba4417e6bd704f8eebf96cac0471e folderAsset: yes timeCreated: 1472228400 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibration.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Objects; using ArucoUnity.Objects.Trackers; using ArucoUnity.Plugin; using System; using System.Threading; using UnityEngine; namespace ArucoUnity.Calibration { /// /// Calibrates a with a and saves the calibrated camera /// parameters in a file managed by . Base class to reference in editor /// fields. /// /// See the OpenCV and the ArUco module documentations for more information about the calibration process: /// http://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html and /// https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html /// public abstract class ArucoCameraCalibration : ArucoObjectDetector { // Editor fields [SerializeField] [Tooltip("The ArUco board to use for calibration.")] private ArucoBoard calibrationBoard; [SerializeField] [Tooltip("Use a refine algorithm to find not detected markers based on the already detected and the board layout" + " (if using a board).")] private bool refineMarkersDetection = false; [SerializeField] [Tooltip("The camera parameters to use if CalibrationFlags.UseIntrinsicGuess is true. Otherwise, the camera" + " parameters file will be generated from the camera name and the calibration datetime.")] private ArucoCameraParametersController cameraParametersController; // Properties /// /// Gets or sets the ArUco board to use for calibration. /// public ArucoBoard CalibrationBoard { get { return calibrationBoard; } set { calibrationBoard = value; } } /// /// Gets or sets if need to use a refine algorithm to find not detected markers based on the already detected and /// the board layout. /// public bool RefineMarkersDetection { get { return refineMarkersDetection; } set { refineMarkersDetection = value; } } /// /// Gets or sets the camera parameters to use if is true. /// Otherwise, the camera parameters file will be generated from the camera name and the calibration datetime. /// public ArucoCameraParametersController CameraParametersController { get { return cameraParametersController; } set { cameraParametersController = value; } } /// /// Gets or sets the flags for the cameras calibration. /// public CalibrationFlags CalibrationFlags { get; set; } /// /// Gets the detected marker corners for each camera. /// public Std.VectorVectorVectorPoint2f[] AllMarkerCorners { get; protected set; } /// /// Gets the detected marker ids for each camera. /// public Std.VectorVectorInt[] AllMarkerIds { get; protected set; } /// /// Gets the images to use for the calibration. /// public Std.VectorMat[] Images { get; protected set; } /// /// Gets the estimated rotation vector for each detected markers in each camera. /// public Std.VectorVec3d[] Rvecs { get; protected set; } /// /// Gets the estimated translation vector for each detected markers in each camera. /// public Std.VectorVec3d[] Tvecs { get; protected set; } /// /// Gets the detected marker corners on the current images of each camera. /// public Std.VectorVectorPoint2f[] MarkerCorners { get; protected set; } /// /// Gets the detected marker ids on the current images of each camera. /// public Std.VectorInt[] MarkerIds { get; protected set; } /// /// Gets if the last call has been a success. /// public bool IsCalibrated { get; protected set; } /// /// Gets if has been called and hasn't completed yet. /// public bool CalibrationRunning { get; protected set; } // Events /// /// Called when is set to true. /// public event Action Calibrated = delegate { }; // Variables protected string applicationPath; protected Thread calibratingThread; protected Mutex calibratingMutex = new Mutex(); protected Exception calibratingException; // MonoBehaviour methods /// /// Calls the event when a calibration has just completed. /// protected virtual void LateUpdate() { Exception e = null; bool calibrationDone = false; calibratingMutex.WaitOne(); { e = calibratingException; calibratingException = null; calibrationDone = CalibrationRunning && IsCalibrated; } calibratingMutex.ReleaseMutex(); // Check for exception in calibrating thread if (e != null) { calibratingThread.Abort(); CalibrationRunning = false; throw e; } // Check for calibration done if (calibrationDone) { CalibrationRunning = false; Calibrated.Invoke(); } } // ConfigurableController methods /// /// Checks if is set and calls . /// protected override void Configuring() { base.Configuring(); if (CalibrationBoard == null) { throw new ArgumentNullException("CalibrationBoard", "This property needs to be set to configure the" + " calibration controller."); } ResetCalibration(); } /// /// Susbcribes to . /// protected override void Starting() { base.Starting(); ArucoCamera.ImagesUpdated += ArucoCamera_ImagesUpdated; } /// /// Unsusbcribes from . /// protected override void Stopping() { base.Stopping(); ArucoCamera.ImagesUpdated -= ArucoCamera_ImagesUpdated; } // Methods /// /// Resets the properties. /// public virtual void ResetCalibration() { AllMarkerCorners = new Std.VectorVectorVectorPoint2f[ArucoCamera.CameraNumber]; AllMarkerIds = new Std.VectorVectorInt[ArucoCamera.CameraNumber]; Images = new Std.VectorMat[ArucoCamera.CameraNumber]; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { AllMarkerCorners[cameraId] = new Std.VectorVectorVectorPoint2f(); AllMarkerIds[cameraId] = new Std.VectorVectorInt(); Images[cameraId] = new Std.VectorMat(); } Rvecs = new Std.VectorVec3d[ArucoCamera.CameraNumber]; Tvecs = new Std.VectorVec3d[ArucoCamera.CameraNumber]; MarkerCorners = new Std.VectorVectorPoint2f[ArucoCamera.CameraNumber]; MarkerIds = new Std.VectorInt[ArucoCamera.CameraNumber]; IsCalibrated = false; } /// /// Detects the Aruco markers on the current images of the cameras and store the results in the /// and properties. /// public virtual void DetectMarkers() { if (!IsConfigured || !IsStarted) { throw new Exception("Configure and start the calibration controller before detect markers."); } for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Std.VectorInt markerIds; Std.VectorVectorPoint2f markerCorners, rejectedCandidateCorners; Aruco.DetectMarkers(ArucoCamera.Images[cameraId], CalibrationBoard.Dictionary, out markerCorners, out markerIds, DetectorParameters, out rejectedCandidateCorners); MarkerCorners[cameraId] = markerCorners; MarkerIds[cameraId] = markerIds; if (RefineMarkersDetection) { Aruco.RefineDetectedMarkers(ArucoCamera.Images[cameraId], CalibrationBoard.Board, MarkerCorners[cameraId], MarkerIds[cameraId], rejectedCandidateCorners); } } } /// /// Draws the detected ArUco markers on the current images of the cameras. /// public virtual void DrawDetectedMarkers() { if (!IsConfigured || !IsStarted) { throw new Exception("Configure and start the calibration controller before drawing detected markers."); } for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { if (MarkerIds[cameraId] != null && MarkerIds[cameraId].Size() > 0) { Aruco.DrawDetectedMarkers(ArucoCamera.Images[cameraId], MarkerCorners[cameraId], MarkerIds[cameraId]); } } } /// /// Adds the current images of the cameras and the detected corners for the calibration. /// public virtual void AddImages() { if (!IsConfigured) { throw new Exception("Configure the calibration controller before adding the current images for calibration."); } // Check for validity uint markerIdsNumber = (MarkerIds[0] != null) ? MarkerIds[0].Size() : 0; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { if (MarkerIds[cameraId] == null || MarkerIds[cameraId].Size() < 1) { throw new Exception("No markers detected for the camera " + (cameraId + 1) + "/" + ArucoCamera.CameraNumber + " to add the current images for the calibration. At least one marker detected is required for" + " calibrating the camera."); } if (markerIdsNumber != MarkerIds[cameraId].Size()) { throw new Exception("The cameras must have detected the same number of markers to add the current images" + " for the calibration."); } } // Save the images and the detected corners Cv.Mat[] cameraImages = ArucoCamera.Images; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { AllMarkerCorners[cameraId].PushBack(MarkerCorners[cameraId]); AllMarkerIds[cameraId].PushBack(MarkerIds[cameraId]); Images[cameraId].PushBack(ArucoCamera.Images[cameraId].Clone()); } } /// /// Calls in a background thread. /// public virtual void CalibrateAsync() { if (!IsConfigured) { throw new Exception("Configure the calibration controller before starting the async calibration."); } bool calibrationRunning = false; calibratingMutex.WaitOne(); { calibrationRunning = CalibrationRunning; } calibratingMutex.ReleaseMutex(); if (calibrationRunning) { throw new Exception("A calibration is already running. Wait its completion or call CancelCalibrateAsync()" + " before starting a new calibration."); } calibratingThread = new Thread(() => { try { Calibrate(); } catch (Exception e) { calibratingMutex.WaitOne(); { calibratingException = e; } calibratingMutex.ReleaseMutex(); } }); calibratingThread.IsBackground = true; calibratingThread.Start(); } /// /// Stops the calibration if is true. /// public virtual void CancelCalibrateAsync() { if (!IsConfigured) { throw new Exception("Configure the calibration controller before starting or canceling the calibration."); } bool calibrationRunning = false; calibratingMutex.WaitOne(); { calibrationRunning = CalibrationRunning; } calibratingMutex.ReleaseMutex(); if (!calibrationRunning) { throw new Exception("Start the async calibration before canceling it."); } calibratingThread.Abort(); } /// /// Calibrates each mono camera in using the detected /// markers added with , the , the /// and save the results on a calibration file. Stereo /// calibrations will be additionally executed on these results for every camera pair. /// public virtual void Calibrate() { if (!IsConfigured) { throw new Exception("Configure the calibration controller before starting the calibration."); } // Update state calibratingMutex.WaitOne(); { IsCalibrated = false; CalibrationRunning = true; } calibratingMutex.ReleaseMutex(); // Check if there is enough captured images for calibration Aruco.CharucoBoard charucoBoard = CalibrationBoard.Board as Aruco.CharucoBoard; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { if (charucoBoard == null && AllMarkerIds[cameraId].Size() < 3) { throw new Exception("Need at least three images captured for the camera " + (cameraId + 1) + "/" + ArucoCamera.CameraNumber + " to calibrate."); } else if (charucoBoard != null && AllMarkerIds[cameraId].Size() < 4) { throw new Exception("Need at least four images captured for the camera " + (cameraId + 1) + "/" + ArucoCamera.CameraNumber + " to calibrate with a ChAruco board."); } } InitializeCameraParameters(); // Initialize and configure the camera parameters // Get objet and image calibration points from detected ids and corners Std.VectorVectorPoint2f[] imagePoints = new Std.VectorVectorPoint2f[ArucoCamera.CameraNumber]; Std.VectorVectorPoint3f[] objectPoints = new Std.VectorVectorPoint3f[ArucoCamera.CameraNumber]; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { imagePoints[cameraId] = new Std.VectorVectorPoint2f(); objectPoints[cameraId] = new Std.VectorVectorPoint3f(); uint imagesCount = AllMarkerCorners[cameraId].Size(); for (uint imageId = 0; imageId < imagesCount; imageId++) { Std.VectorPoint2f currentImagePoints; Std.VectorPoint3f currentObjectPoints; if (charucoBoard == null) { // Using a grid board Aruco.GetBoardObjectAndImagePoints(CalibrationBoard.Board, AllMarkerCorners[cameraId].At(imageId), AllMarkerIds[cameraId].At(imageId), out currentObjectPoints, out currentImagePoints); } else { // Using a charuco board Std.VectorInt charucoIds; Aruco.InterpolateCornersCharuco(AllMarkerCorners[cameraId].At(imageId), AllMarkerIds[cameraId].At(imageId), Images[cameraId].At(imageId), charucoBoard, out currentImagePoints, out charucoIds); // Join the object points corresponding to the detected markers currentObjectPoints = new Std.VectorPoint3f(); uint markerCount = charucoIds.Size(); for (uint marker = 0; marker < markerCount; marker++) { uint pointId = (uint)charucoIds.At(marker); Cv.Point3f objectPoint = charucoBoard.ChessboardCorners.At(pointId); currentObjectPoints.PushBack(objectPoint); } } imagePoints[cameraId].PushBack(currentImagePoints); objectPoints[cameraId].PushBack(currentObjectPoints); } } // Calibrate the Aruco camera Calibrate(imagePoints, objectPoints); // Save the camera parameters CameraParametersController.CameraParametersFilename = ArucoCamera.Name + " - " + CameraParametersController.CameraParameters.CalibrationDateTime.ToString("yyyy-MM-dd_HH-mm-ss") + ".xml"; CameraParametersController.Save(); // Update state calibratingMutex.WaitOne(); { IsCalibrated = true; } calibratingMutex.ReleaseMutex(); } /// /// Detects and draw the ArUco markers on the current images of the cameras. /// protected virtual void ArucoCamera_ImagesUpdated() { DetectMarkers(); DrawDetectedMarkers(); } /// /// Initializes and configure the . /// protected virtual void InitializeCameraParameters() { if (CalibrationFlags != null && CalibrationFlags.UseIntrinsicGuess) { if (CameraParametersController.CameraParameters == null || CameraParametersController.CameraParameters.CameraMatrices == null) { throw new Exception("CalibrationFlags.UseIntrinsicGuess flag is set but CameraParameters is null or has no" + " valid values. Set CameraParametersFilename or deactivate this flag."); } } else { CameraParametersController.Initialize(ArucoCamera.CameraNumber); for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { CameraParametersController.CameraParameters.CameraMatrices[cameraId] = new Cv.Mat(); CameraParametersController.CameraParameters.DistCoeffs[cameraId] = new Cv.Mat(); CameraParametersController.CameraParameters.OmnidirXis[cameraId] = new Cv.Mat(); } } CameraParametersController.CameraParameters.CalibrationFlagsValue = (CalibrationFlags != null) ? CalibrationFlags.Value : default(int); for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { CameraParametersController.CameraParameters.ImageHeights[cameraId] = ArucoCamera.Images[cameraId].Size.Height; CameraParametersController.CameraParameters.ImageWidths[cameraId] = ArucoCamera.Images[cameraId].Size.Width; } } /// /// Applies a calibration to the , set the extrinsic camera /// parameters to and and saves the camera parameters in /// . /// /// The detected image points of each camera. /// The corresponding object points of each camera. protected abstract void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibration.cs.meta ================================================ fileFormatVersion: 2 guid: 3a1cefd1a9599b7439e9638d24e4039e timeCreated: 1525350928 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGUI.cs ================================================ using ArucoUnity.Utilities; using System; using UnityEngine; using UnityEngine.UI; namespace ArucoUnity.Calibration { public class ArucoCameraCalibrationGUI : MonoBehaviour { // Editor fields [SerializeField] private ArucoCameraCalibration arucoCameraCalibration; [SerializeField] private RectTransform arucoCameraImagesRect; [SerializeField] private Button addImagesButton; [SerializeField] private Text imagesCountText; [SerializeField] private Button calibrateButton; [SerializeField] private Text calibrationStatusText; [SerializeField] private Button resetButton; // Variables private Text[] calibrationReprojectionErrorTexts; private Text calibrateButtonText; // MonoBehaviour methods /// /// Prepares the buttons and subscribes to ArucoCalibrator started event to set the image display. /// protected void Awake() { calibrateButtonText = calibrateButton.transform.GetChild(0).GetComponent(); // Configure the buttons addImagesButton.enabled = false; calibrateButton.enabled = false; resetButton.enabled = false; // Bind the button clicks addImagesButton.onClick.AddListener(AddImagesForCalibration); calibrateButton.onClick.AddListener(Calibrate); resetButton.onClick.AddListener(ResetCalibration); // Suscribe to ArucoCalibrator events if (arucoCameraCalibration.IsStarted) { ConfigureUI(this, EventArgs.Empty); } arucoCameraCalibration.Started += ConfigureUI; arucoCameraCalibration.Calibrated += Calibrated; } /// /// Unsubscribes from ArucoCalibrator events. /// protected void OnDestroy() { arucoCameraCalibration.Started -= ConfigureUI; arucoCameraCalibration.Calibrated -= Calibrated; } /// /// Configures the images display. /// protected void ConfigureUI(object sender, EventArgs e) { // Configure the buttons addImagesButton.enabled = true; calibrateButton.enabled = false; resetButton.enabled = false; // Configure the images display var arucoCamera = arucoCameraCalibration.ArucoCamera; calibrationReprojectionErrorTexts = new Text[arucoCamera.CameraNumber]; // Configure the arucoCameraImagesRect as a grid of images int gridCols = 1, gridRows = 1; for (int i = 0; i < arucoCamera.CameraNumber; i++) { if (gridCols * gridRows > i) { continue; } else if (arucoCameraImagesRect.rect.width / gridCols >= arucoCameraImagesRect.rect.height / gridRows) { gridCols++; } else { gridRows++; } } Vector2 gridCellSize = new Vector2(1f / gridCols, 1f / gridRows); // Configure the cells of the grid of images for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { int cellCol = cameraId % gridCols; // Range : 0 to (gridCols - 1), images from left to right int cellRow = (gridRows - 1) - (cameraId / gridCols); // Range : (gridRows - 1) to 0, images from top to bottom // Create a cell on the grid for each camera image GameObject cell = new GameObject("Image " + cameraId + " display"); RectTransform cellRect = cell.AddComponent(); cellRect.SetParent(arucoCameraImagesRect); cellRect.anchorMin = new Vector2(1f / gridCols * cellCol, 1f / gridRows * cellRow); // Cell's position cellRect.anchorMax = cellRect.anchorMin + gridCellSize; // All cells have the same size cellRect.offsetMin = cellRect.offsetMax = Vector2.zero; // No margins cellRect.localScale = Vector3.one; // Create an image display inside the cell GameObject cellDisplay = new GameObject("Image"); cellDisplay.transform.SetParent(cellRect); cellDisplay.transform.localScale = Vector3.one; RawImage cellDisplayImage = cellDisplay.AddComponent(); cellDisplayImage.texture = arucoCamera.Textures[cameraId]; AspectRatioFitter cellDisplayFitter = cellDisplay.AddComponent(); // Fit the image inside the cell cellDisplayFitter.aspectMode = AspectRatioFitter.AspectMode.FitInParent; cellDisplayFitter.aspectRatio = arucoCamera.ImageRatios[cameraId]; // Create a text for calibration reprojection error inside the cell GameObject reproError = new GameObject("CalibrationReprojectionErrorText"); RectTransform reproErrorRect = reproError.AddComponent(); reproErrorRect.SetParent(cellRect); reproErrorRect.pivot = Vector2.zero; reproErrorRect.anchorMin = reproErrorRect.anchorMax = Vector2.zero; reproErrorRect.offsetMin = Vector2.one * 5; // Pos X and pos Y margins reproErrorRect.offsetMax = new Vector2(120, 60); // width and Height reproErrorRect.localScale = Vector3.one; Text reproErrorText = reproError.AddComponent(); reproErrorText.font = Resources.GetBuiltinResource("Arial.ttf"); reproErrorText.fontSize = 12; reproErrorText.color = Color.red; calibrationReprojectionErrorTexts[cameraId] = reproErrorText; } // Configure the text UpdateImagesCountText(); UpdateCalibrationReprojectionErrorText(); } /// /// Adds the current images to the calibration, and update the UI. /// private void AddImagesForCalibration() { if (!arucoCameraCalibration.IsConfigured) { return; } arucoCameraCalibration.AddImages(); calibrateButton.enabled = true; resetButton.enabled = true; UpdateImagesCountText(); } /// /// Calibrates and updates the UI. /// private void Calibrate() { if (!arucoCameraCalibration.IsConfigured) { return; } if (!arucoCameraCalibration.CalibrationRunning) { arucoCameraCalibration.CalibrateAsync(); calibrateButtonText.text = "Stop calibration"; calibrationStatusText.text = "Calibration status : running"; } else { arucoCameraCalibration.CancelCalibrateAsync(); calibrateButtonText.text = "Calibrate"; calibrationStatusText.text = "Calibration status : stopped"; } } /// /// Updates the UI with the calibration results. /// private void Calibrated() { calibrateButtonText.text = "Calibrate"; calibrationStatusText.text = "Calibration status : finished"; UpdateCalibrationReprojectionErrorText(); } /// /// Resets the calibration and update the UI. /// private void ResetCalibration() { arucoCameraCalibration.ResetCalibration(); calibrateButton.enabled = false; resetButton.enabled = false; UpdateImagesCountText(); UpdateCalibrationReprojectionErrorText(); } /// /// Updates the text of the number of images added for calibration. /// private void UpdateImagesCountText() { string imagesCount = (arucoCameraCalibration.AllMarkerIds != null && arucoCameraCalibration.AllMarkerIds[0] != null) ? "" + arucoCameraCalibration.AllMarkerIds[0].Size() : "0"; imagesCountText.text = "Images count: " + imagesCount; } /// /// Updates text for of the calibration results. /// private void UpdateCalibrationReprojectionErrorText() { for (int cameraId = 0; cameraId < arucoCameraCalibration.ArucoCamera.CameraNumber; cameraId++) { double reprojectionError = (arucoCameraCalibration.CameraParametersController.CameraParameters != null) ? arucoCameraCalibration.CameraParametersController.CameraParameters.ReprojectionErrors[cameraId] : 0.0; calibrationReprojectionErrorTexts[cameraId].text = "Camera " + (cameraId + 1) + "/" + arucoCameraCalibration.ArucoCamera.CameraNumber + "\n" + "Reprojection error: " + reprojectionError.ToString("F3"); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGUI.cs.meta ================================================ fileFormatVersion: 2 guid: ede7fb9eabbd29442941c6491f769102 timeCreated: 1486670229 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGeneric.cs ================================================ using ArucoUnity.Cameras; using UnityEngine; namespace ArucoUnity.Calibration { public abstract class ArucoCameraCalibrationGeneric : ArucoCameraCalibration where T : ArucoCamera where U : CalibrationFlags { // Editor fields [SerializeField] [Tooltip("The camera system to use.")] private T arucoCamera; [SerializeField] [Tooltip("The flags for the cameras calibration.")] protected U calibrationFlags; // MonoBehaviour methods /// /// Sets and /// with editor fields if not nulls. /// protected override void Awake() { base.Awake(); if (arucoCamera != null) { ArucoCamera = arucoCamera; } if (calibrationFlags != null) { CalibrationFlags = calibrationFlags; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: 5add3f7ac2f57864f84f5db8516a74de timeCreated: 1491427717 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlags.cs ================================================ using System; using UnityEngine; namespace ArucoUnity.Calibration { /// /// Manages the flags of the process. Base class to reference in editor fields. /// public abstract class CalibrationFlags : MonoBehaviour { // Editor fields [Header("Calibration flags")] [SerializeField] [Tooltip("Use and optimize the initial values (fx, fy), (cx, cy) of the camera matrix during the calibration process.")] private bool useIntrinsicGuess = false; [SerializeField] [Tooltip("The corresponding radial distortion coefficient is not changed during the calibration. If useIntrinsicGuess" + " is set, the original DistCoeffs value in the camera parameters are used, otherwise it's to 0.")] private bool[] fixKDistorsionCoefficients; // Properties /// /// Gets or sets if the has valid initial /// value that will be optimized by the calibration process. /// public bool UseIntrinsicGuess { get { return useIntrinsicGuess; } set { useIntrinsicGuess = value; } } /// /// Gets or sets if the corresponding radial distortion coefficients are not changed during the calibration. /// If useIntrinsicGuess is set, the original /// values in the camera parameters are used, otherwise they're set to 0. /// public bool[] FixKDistorsionCoefficients { get { return fixKDistorsionCoefficients; } set { if (value.Length == FixKLength) { fixKDistorsionCoefficients = value; UpdateCalibrationFlags(); } } } /// /// Gets or sets if the equivalent int, used by OpenCV, of the calibration flags. /// public abstract int Value { get; set; } /// /// Gets the length of array. /// protected abstract int FixKLength { get; } // Methods /// /// Updates from the flag properties. /// protected abstract void UpdateCalibrationFlags(); /// /// Updates the flag property values from . /// protected abstract void UpdateCalibrationOptions(); /// /// Keeps the array to its fixed length in the editor. /// protected virtual void OnValidate() { if (fixKDistorsionCoefficients != null && fixKDistorsionCoefficients.Length != FixKLength) { Array.Resize(ref fixKDistorsionCoefficients, FixKLength); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlags.cs.meta ================================================ fileFormatVersion: 2 guid: 340aba90e0751f14f8c63f4617eeebdb timeCreated: 1490292145 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlagsGeneric.cs ================================================ using System; namespace ArucoUnity.Calibration { /// /// Manages the flags of the process. Generic class to use in scripts. /// public abstract class CalibrationFlagsGeneric : CalibrationFlags where T : struct, IConvertible, IComparable, IFormattable { // CameraCalibrationFlags properties public override int Value { get { return Convert.ToInt32(Enum.Parse(typeof(T), Flags.ToString()) as Enum); } set { Flags = (T)Enum.ToObject(typeof(T), value); } } // Properties /// /// Gets or sets the calibration flags enum and keeps updated the flag properties. /// public T Flags { get { UpdateCalibrationFlags(); return flags; } set { flags = value; UpdateCalibrationOptions(); } } // Variables protected T flags; } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlagsGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: 4615268aee8648b45b9d6d06e9c0d6aa timeCreated: 1525354837 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibration.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Plugin; namespace ArucoUnity.Calibration.Omnidir { public class OmnidirCameraCalibration : ArucoCameraCalibrationGeneric { // ArucoCameraCalibration methods protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints) { var cameraParameters = CameraParametersController.CameraParameters; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Std.VectorVec3d rvecs, tvecs; cameraParameters.ReprojectionErrors[cameraId] = Cv.Omnidir.Calibrate(objectPoints[cameraId], imagePoints[cameraId], ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.OmnidirXis[cameraId], cameraParameters.DistCoeffs[cameraId], out rvecs, out tvecs, calibrationFlags.Flags); Rvecs[cameraId] = rvecs; Tvecs[cameraId] = tvecs; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibration.cs.meta ================================================ fileFormatVersion: 2 guid: 4b6859419089da74a90f9ad6387a7983 timeCreated: 1510719606 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibrationFlags.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; using System; namespace ArucoUnity.Calibration.Omnidir { /// /// Manages the flags of the omnidir calibration process. /// public class OmnidirCameraCalibrationFlags : CalibrationFlagsGeneric { // Editor fields [SerializeField] private bool fixSkew = false; [SerializeField] private bool[] fixP; [SerializeField] private bool fixXi = false; [SerializeField] private bool fixGamma = false; [SerializeField] private bool fixCenter = false; // Properties public bool FixSkew { get { return fixSkew; } set { fixSkew = value; } } public bool[] FixP { get { return fixP; } set { if (value.Length == FixPLength) { fixP = value; UpdateCalibrationFlags(); } } } public bool FixXi { get { return fixXi; } set { fixXi = value; } } public bool FixGamma { get { return fixGamma; } set { fixGamma = value; } } public bool FixCenter { get { return fixCenter; } set { fixCenter = value; } } protected override int FixKLength { get { return 2; } } protected int FixPLength { get { return 2; } } // Methods protected override void UpdateCalibrationFlags() { flags = 0; if (UseIntrinsicGuess) { flags |= Cv.Omnidir.Calib.UseGuess; } if (FixSkew) { flags |= Cv.Omnidir.Calib.FixSkew; } if (FixKDistorsionCoefficients[0]) { flags |= Cv.Omnidir.Calib.FixK1; } if (FixKDistorsionCoefficients[1]) { flags |= Cv.Omnidir.Calib.FixK2; } if (FixP[0]) { flags |= Cv.Omnidir.Calib.FixP1; } if (FixP[1]) { flags |= Cv.Omnidir.Calib.FixP2; } if (FixXi) { flags |= Cv.Omnidir.Calib.FixXi; } if (FixGamma) { flags |= Cv.Omnidir.Calib.FixGamma; } if (FixCenter) { flags |= Cv.Omnidir.Calib.FixCenter; } } protected override void UpdateCalibrationOptions() { UseIntrinsicGuess = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.UseGuess); FixSkew = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixSkew); FixKDistorsionCoefficients[0] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixK1); FixKDistorsionCoefficients[1] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixK2); FixP[0] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixP1); FixP[1] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixP2); FixXi = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixXi); FixGamma = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixGamma); FixCenter = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixCenter); } protected override void OnValidate() { base.OnValidate(); if (fixP != null && fixP.Length != FixPLength) { Array.Resize(ref fixP, FixPLength); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibrationFlags.cs.meta ================================================ fileFormatVersion: 2 guid: 4cfa914475d82db49b6f0d7f57d13438 timeCreated: 1493224261 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/StereoOmnidirCameraCalibration.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; namespace ArucoUnity.Calibration.Omnidir { public class StereoOmnidirCameraCalibration : ArucoCameraCalibrationGeneric { // ArucoCameraCalibration methods protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints) { int cameraId1 = StereoArucoCamera.CameraId1, cameraId2 = StereoArucoCamera.CameraId2; var cameraParameters = CameraParametersController.CameraParameters; Cv.Vec3d rvec, tvec; Std.VectorVec3d rvecsCamera1, tvecsCamera1; var reprojectionError = Cv.Omnidir.StereoCalibrate( objectPoints[cameraId1], imagePoints[cameraId1], imagePoints[cameraId2], ArucoCamera.Images[cameraId1].Size, ArucoCamera.Images[cameraId2].Size, cameraParameters.CameraMatrices[cameraId1], cameraParameters.OmnidirXis[cameraId1], cameraParameters.DistCoeffs[cameraId1], cameraParameters.CameraMatrices[cameraId2], cameraParameters.OmnidirXis[cameraId2], cameraParameters.DistCoeffs[cameraId2], out rvec, out tvec, out rvecsCamera1, out tvecsCamera1, calibrationFlags.Flags); Rvecs[StereoArucoCamera.CameraId1] = rvecsCamera1; Tvecs[StereoArucoCamera.CameraId1] = tvecsCamera1; cameraParameters.StereoCameraParameters = new StereoArucoCameraParameters() { ReprojectionError = reprojectionError, RotationVector = rvec, TranslationVector = tvec, CalibrationFlagsValue = calibrationFlags.Value }; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir/StereoOmnidirCameraCalibration.cs.meta ================================================ fileFormatVersion: 2 guid: e66674f2448052d4eaf3e9159a923d7b timeCreated: 1511904338 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Omnidir.meta ================================================ fileFormatVersion: 2 guid: 51bc816fc9fd5e9448b5c5f6650fe7c7 folderAsset: yes timeCreated: 1511904285 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibration.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Plugin; namespace ArucoUnity.Calibration.Pinhole { public class PinholeCameraCalibration : PinholeCameraCalibrationBase { // ArucoCameraCalibration methods protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints) { var cameraParameters = CameraParametersController.CameraParameters; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Std.VectorVec3d rvecs, tvecs; cameraParameters.ReprojectionErrors[cameraId] = Cv.CalibrateCamera(objectPoints[cameraId], imagePoints[cameraId], ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId], out rvecs, out tvecs, calibrationFlags.Flags); Rvecs[cameraId] = rvecs; Tvecs[cameraId] = tvecs; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibration.cs.meta ================================================ fileFormatVersion: 2 guid: a8936dfef56ecc642bce8962a9434dd2 timeCreated: 1510719595 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationBase.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Plugin; namespace ArucoUnity.Calibration.Pinhole { /// /// Calibrates a using the pinhole camera model with a and /// saves the calibrated camera parameters in a file managed by . /// public abstract class PinholeCameraCalibrationBase : ArucoCameraCalibrationGeneric where T : ArucoCamera { protected override void InitializeCameraParameters() { base.InitializeCameraParameters(); if (calibrationFlags.FixAspectRatio) { for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { CameraParametersController.CameraParameters.CameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F, new double[9] { calibrationFlags.FixAspectRatioValue, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 }); } CameraParametersController.CameraParameters.FixAspectRatioValue = calibrationFlags.FixAspectRatioValue; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationBase.cs.meta ================================================ fileFormatVersion: 2 guid: 792f20e9cc065da4ab86d01f92455eee timeCreated: 1511904264 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationFlags.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; using System; namespace ArucoUnity.Calibration.Pinhole { /// /// Manages the flags of the pinhole camera process. /// public class PinholeCameraCalibrationFlags : CalibrationFlagsGeneric { // Constants const float DefaultFixAspectRatio = 1f; // Editor fields [SerializeField] [Tooltip("The principal point (cx, cy) is not changed during the calibration.")] private bool fixPrincipalPoint = false; [SerializeField] private bool fixAspectRatio = false; [SerializeField] private float fixAspectRatioValue = DefaultFixAspectRatio; [SerializeField] private bool zeroTangentialDistorsion = false; [SerializeField] private bool rationalModel = false; [SerializeField] private bool thinPrismModel = false; [SerializeField] private bool fixS1_S2_S3_S4 = false; [SerializeField] private bool tiltedModel = false; [SerializeField] private bool fixTauxTauy = false; [Header("Additional flags for stereo calibration")] [SerializeField] private bool fixFocalLength = false; [SerializeField] private bool fixIntrinsic = true; [SerializeField] private bool sameFocalLength = false; // Properties /// /// Gets or sets if the principal point (cx, cy) is not changed during the calibration. /// public bool FixPrincipalPoint { get { return fixPrincipalPoint; } set { fixPrincipalPoint = value; } } public bool FixAspectRatio { get { return fixAspectRatio; } set { fixAspectRatio = value; } } public float FixAspectRatioValue { get { return fixAspectRatioValue; } set { fixAspectRatioValue = value; } } public bool ZeroTangentialDistorsion { get { return zeroTangentialDistorsion; } set { zeroTangentialDistorsion = value; } } public bool RationalModel { get { return rationalModel; } set { rationalModel = value; } } public bool ThinPrismModel { get { return thinPrismModel; } set { thinPrismModel = value; } } public bool FixS1_S2_S3_S4 { get { return fixS1_S2_S3_S4; } set { fixS1_S2_S3_S4 = value; } } public bool TiltedModel { get { return tiltedModel; } set { tiltedModel = value; } } public bool FixTauxTauy { get { return fixTauxTauy; } set { fixTauxTauy = value; } } public bool FixFocalLength { get { return fixFocalLength; } set { fixFocalLength = value; } } public bool FixIntrinsic { get { return fixIntrinsic; } set { fixIntrinsic = value; } } public bool SameFocalLength { get { return sameFocalLength; } set { sameFocalLength = value; } } protected override int FixKLength { get { return 6; } } // Methods protected override void UpdateCalibrationFlags() { flags = 0; if (UseIntrinsicGuess) { flags |= Cv.Calib.UseIntrinsicGuess; } if (FixPrincipalPoint) { flags |= Cv.Calib.FixPrincipalPoint; } if (FixKDistorsionCoefficients[0]) { flags |= Cv.Calib.FixK1; } if (FixKDistorsionCoefficients[1]) { flags |= Cv.Calib.FixK2; } if (FixKDistorsionCoefficients[2]) { flags |= Cv.Calib.FixK3; } if (FixKDistorsionCoefficients[3]) { flags |= Cv.Calib.FixK4; } if (FixKDistorsionCoefficients[4]) { flags |= Cv.Calib.FixK5; } if (FixKDistorsionCoefficients[5]) { flags |= Cv.Calib.FixK6; } if (FixAspectRatio) { flags |= Cv.Calib.FixAspectRatio; } if (ZeroTangentialDistorsion) { flags |= Cv.Calib.ZeroTangentDist; } if (RationalModel) { flags |= Cv.Calib.RationalModel; } if (ThinPrismModel) { flags |= Cv.Calib.ThinPrismModel; } if (FixS1_S2_S3_S4) { flags |= Cv.Calib.FixS1S2S3S4; } if (TiltedModel) { flags |= Cv.Calib.TiltedModel; } if (FixTauxTauy) { flags |= Cv.Calib.FixTauxTauy; } if (FixFocalLength) { flags |= Cv.Calib.FixFocalLength; } if (FixIntrinsic) { flags |= Cv.Calib.FixIntrinsic; } if (SameFocalLength) { flags |= Cv.Calib.SameFocalLength; } } protected override void UpdateCalibrationOptions() { UseIntrinsicGuess = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.UseIntrinsicGuess); FixPrincipalPoint = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixPrincipalPoint); FixKDistorsionCoefficients[0] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK1); FixKDistorsionCoefficients[1] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK2); FixKDistorsionCoefficients[2] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK3); FixKDistorsionCoefficients[3] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK4); FixKDistorsionCoefficients[4] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK5); FixKDistorsionCoefficients[5] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK6); ZeroTangentialDistorsion = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.ZeroTangentDist); RationalModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.RationalModel); ThinPrismModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.ThinPrismModel); FixS1_S2_S3_S4 = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixS1S2S3S4); TiltedModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.TiltedModel); FixTauxTauy = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixTauxTauy); FixFocalLength = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixFocalLength); FixIntrinsic = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixIntrinsic); SameFocalLength = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.SameFocalLength); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationFlags.cs.meta ================================================ fileFormatVersion: 2 guid: 44099b4ed8318e845a10ed126f62bbe2 timeCreated: 1490292145 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/StereoPinholeCameraCalibration.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; namespace ArucoUnity.Calibration.Pinhole { public class StereoPinholeCameraCalibration : PinholeCameraCalibrationBase { // ArucoCameraCalibration methods protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints) { // Calibrate first each camera var cameraParameters = CameraParametersController.CameraParameters; for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Std.VectorVec3d rvecs, tvecs; cameraParameters.ReprojectionErrors[cameraId] = Cv.CalibrateCamera(objectPoints[cameraId], imagePoints[cameraId], ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId], out rvecs, out tvecs, calibrationFlags.Flags); Rvecs[cameraId] = rvecs; Tvecs[cameraId] = tvecs; } // Stereo calibration int cameraId1 = StereoArucoCamera.CameraId1; int cameraId2 = StereoArucoCamera.CameraId2; var cameraMatrix1 = cameraParameters.CameraMatrices[cameraId1]; var distCoeffs1 = cameraParameters.DistCoeffs[cameraId1]; var cameraMatrix2 = cameraParameters.CameraMatrices[cameraId2]; var distCoeffs2 = cameraParameters.DistCoeffs[cameraId2]; var imageSize = ArucoCamera.Images[cameraId1].Size; var stereoCameraParameters = new StereoArucoCameraParameters(); Cv.Vec3d rvec, tvec; Cv.Mat rotationMatrix, essentialMatrix, fundamentalMatrix; stereoCameraParameters.ReprojectionError = Cv.StereoCalibrate(objectPoints[cameraId1], imagePoints[cameraId1], imagePoints[cameraId2], cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, out rotationMatrix, out tvec, out essentialMatrix, out fundamentalMatrix, calibrationFlags.Flags); Cv.Rodrigues(rotationMatrix, out rvec); stereoCameraParameters.RotationVector = rvec; stereoCameraParameters.TranslationVector = tvec; stereoCameraParameters.CalibrationFlagsValue = calibrationFlags.Value; cameraParameters.StereoCameraParameters = stereoCameraParameters; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole/StereoPinholeCameraCalibration.cs.meta ================================================ fileFormatVersion: 2 guid: 64bcf1901ac9fc44d9bf16ca10a527bc timeCreated: 1511904324 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations/Pinhole.meta ================================================ fileFormatVersion: 2 guid: b948a1b0c340f9e42890fc8e598168f6 folderAsset: yes timeCreated: 1511904289 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Calibrations.meta ================================================ fileFormatVersion: 2 guid: 1c1146b7921c08541ae1e1dd9fb04e41 folderAsset: yes timeCreated: 1510714725 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoCamera.cs ================================================ using ArucoUnity.Plugin; using ArucoUnity.Utilities; using System; using UnityEngine; namespace ArucoUnity.Cameras { /// /// Captures images of a camera. /// /// /// To add a new camera, you need to derive this class. See as example. You need to /// implement , , /// and . /// public abstract class ArucoCamera : Controller, IArucoCamera { // Constants protected readonly int? dontFlipCode = null; private const int buffersCount = 2; // IArucoCamera events public event Action ImagesUpdated = delegate { }; public event Action UndistortRectifyImages = delegate { }; // IArucoCamera properties public abstract int CameraNumber { get; } public abstract string Name { get; protected set; } public Texture2D[] Textures { get; private set; } public Cv.Mat[] Images { get { return imageBuffers[currentBuffer]; } } public byte[][] ImageDatas { get { return imageDataBuffers[currentBuffer]; } } public int[] ImageDataSizes { get; private set; } public float[] ImageRatios { get; private set; } protected Cv.Mat[] NextImages { get { return imageBuffers[NextBuffer()]; } } protected byte[][] NextImageDatas { get { return imageDataBuffers[NextBuffer()]; } } // Variables protected uint currentBuffer = 0; protected Cv.Mat[][] imageBuffers = new Cv.Mat[buffersCount][]; protected byte[][][] imageDataBuffers = new byte[buffersCount][][]; protected Cv.Mat[] imagesToTextures; protected byte[][] imagesToTextureDatas; protected bool imagesUpdatedThisFrame = false; protected bool flipHorizontallyImages = false, flipVerticallyImages = false; protected int? imagesFlipCode; // MonoBehaviour methods /// /// When configured and started, calls then . /// protected virtual void Update() { if (IsConfigured && IsStarted) { if (UpdatingImages()) { OnImagesUpdated(); } } } // ConfigurableController methods /// /// Configures the properties. /// protected override void Configuring() { base.Configuring(); if (CameraNumber <= 0) { throw new Exception("It must have at least one camera."); } Textures = new Texture2D[CameraNumber]; ImageDataSizes = new int[CameraNumber]; ImageRatios = new float[CameraNumber]; imagesToTextures = new Cv.Mat[CameraNumber]; imagesToTextureDatas = new byte[CameraNumber][]; for (int bufferId = 0; bufferId < buffersCount; bufferId++) { imageBuffers[bufferId] = new Cv.Mat[CameraNumber]; imageDataBuffers[bufferId] = new byte[CameraNumber][]; } if (!flipHorizontallyImages && !flipVerticallyImages) { imagesFlipCode = Cv.verticalFlipCode; } else if (flipHorizontallyImages && !flipVerticallyImages) { imagesFlipCode = Cv.bothAxesFlipCode; } else if (!flipHorizontallyImages && flipVerticallyImages) { imagesFlipCode = dontFlipCode; // Don't flip because the image textures are already vertically flipped } else if (flipHorizontallyImages && flipVerticallyImages) { imagesFlipCode = Cv.horizontalFlipCode; // Image textures are already vertically flipped } } /// /// Initializes the , , , /// , and properties from the /// property. /// protected override void OnStarted() { for (int cameraId = 0; cameraId < CameraNumber; cameraId++) { for (int bufferId = 0; bufferId < buffersCount; bufferId++) { imageBuffers[bufferId][cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width, CvMatExtensions.ImageType(Textures[cameraId].format)); } ImageDataSizes[cameraId] = (int)(Images[cameraId].ElemSize() * Images[cameraId].Total()); ImageRatios[cameraId] = Textures[cameraId].width / (float)Textures[cameraId].height; for (int bufferId = 0; bufferId < buffersCount; bufferId++) { imageDataBuffers[bufferId][cameraId] = new byte[ImageDataSizes[cameraId]]; imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId]; } imagesToTextures[cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width, CvMatExtensions.ImageType(Textures[cameraId].format)); imagesToTextureDatas[cameraId] = new byte[ImageDataSizes[cameraId]]; imagesToTextures[cameraId].DataByte = imagesToTextureDatas[cameraId]; } base.OnStarted(); } // Methods /// /// Updates with the new camera images. /// /// If have been updated. protected abstract bool UpdatingImages(); /// /// Calls with the , swaps and /// , the calls and applies the changes made on the /// to the . /// protected virtual void OnImagesUpdated() { // Undistort next images if (imagesFlipCode != dontFlipCode) { for (int cameraId = 0; cameraId < CameraNumber; cameraId++) { Cv.Flip(NextImages[cameraId], NextImages[cameraId], (int)imagesFlipCode); } } UndistortRectifyImages(NextImages, NextImageDatas); // Swap images currentBuffer = NextBuffer(); ImagesUpdated(); // Update Textures with Images for (int cameraId = 0; cameraId < CameraNumber; cameraId++) { Cv.Flip(Images[cameraId], imagesToTextures[cameraId], Cv.verticalFlipCode); Textures[cameraId].LoadRawTextureData(imagesToTextures[cameraId].DataIntPtr, ImageDataSizes[cameraId]); Textures[cameraId].Apply(false); } } /// /// Returns the index of the next buffer. /// private uint NextBuffer() { return (currentBuffer + 1) % buffersCount; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoCamera.cs.meta ================================================ fileFormatVersion: 2 guid: 62d46e3aaa54c7046b351f582e70eaad timeCreated: 1484938581 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoCameraController.cs ================================================ using ArucoUnity.Utilities; using System; namespace ArucoUnity.Cameras { /// /// Generic configurable controller using a as starting dependency. /// public abstract class ArucoCameraController : Controller, IArucoCameraController { // IArucoCameraController properties public IArucoCamera ArucoCamera { get; set; } // ConfigurableController methods /// /// Adds as dependency. /// protected override void Configuring() { base.Configuring(); if (ArucoCamera == null) { throw new ArgumentNullException("ArucoCamera", "This property needs to be set for the configuration."); } AddDependency(ArucoCamera); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoCameraController.cs.meta ================================================ fileFormatVersion: 2 guid: 0021128bf5c1bca4faf094acf83341f2 timeCreated: 1510714744 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoWebcam.cs ================================================ using ArucoUnity.Utilities; using System; using UnityEngine; namespace ArucoUnity.Cameras { /// /// Captures images of a webcam. /// public class ArucoWebcam : ArucoCamera { // Constants protected const int cameraId = 0; // Editor fields [SerializeField] [Tooltip("The id of the webcam to use.")] private int webcamId; // IArucoCamera properties public override int CameraNumber { get { return 1; } } public override string Name { get; protected set; } // Properties /// /// Gets or set the id of the webcam to use. /// public int WebcamId { get { return webcamId; } set { webcamId = value; } } /// /// Gets the controller of the webcam to use. /// public WebcamController WebcamController { get; private set; } // MonoBehaviour methods /// /// Initializes and subscribes to. /// protected override void Awake() { base.Awake(); WebcamController = gameObject.AddComponent(); WebcamController.Started += WebcamController_Started; } /// /// Unsubscribes to . /// protected override void OnDestroy() { base.OnDestroy(); WebcamController.Started -= WebcamController_Started; } // ConfigurableController methods /// /// Calls and sets . /// protected override void Configuring() { base.Configuring(); WebcamController.Ids.Clear(); WebcamController.Ids.Add(WebcamId); WebcamController.Configure(); Name = WebcamController.Devices[cameraId].name; } /// /// Calls . /// protected override void Starting() { base.Starting(); WebcamController.StartWebcams(); } /// /// Calls . /// protected override void Stopping() { base.Stopping(); WebcamController.StopWebcams(); } /// /// Blocks until . /// protected override void OnStarted() { } // ArucoCamera methods /// /// Copy current webcam images to . /// protected override bool UpdatingImages() { Array.Copy(WebcamController.Textures2D[cameraId].GetRawTextureData(), NextImageDatas[cameraId], ImageDataSizes[cameraId]); return true; } // Methods /// /// Configures and calls . /// protected virtual void WebcamController_Started(WebcamController webcamController) { var webcamTexture = WebcamController.Textures2D[cameraId]; Textures[cameraId] = new Texture2D(webcamTexture.width, webcamTexture.height, webcamTexture.format, false); base.OnStarted(); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/ArucoWebcam.cs.meta ================================================ fileFormatVersion: 2 guid: 43b2fc42ec749de4fa54b3fc1163f23d timeCreated: 1484078137 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplay.cs ================================================ using ArucoUnity.Cameras.Undistortions; using ArucoUnity.Utilities; using UnityEngine; namespace ArucoUnity.Cameras.Displays { /// /// Manages Unity virual cameras that shoot 3D content aligned with the displayed /// as background. It creates the augmented reality effect by the images from the physical cameras and the /// tracked by . /// public abstract class ArucoCameraDisplay : ArucoCameraController, IArucoCameraDisplay { // Constants public const float cameraBackgroundDistance = 1f; // IArucoCameraDisplay properties public virtual Camera[] Cameras { get; protected set; } public virtual Camera[] BackgroundCameras { get; protected set; } public virtual Renderer[] Backgrounds { get; protected set; } // Properties /// /// Gets or sets the optional undistortion process associated with the . /// public IArucoCameraUndistortion ArucoCameraUndistortion { get; set; } // ConfigurableController methods /// /// Adds as dependency if set. /// protected override void Configuring() { base.Configuring(); if (ArucoCameraUndistortion != null) { AddDependency(ArucoCameraUndistortion); } } /// /// Calls the to activate the display. /// protected override void Starting() { base.Starting(); ConfigureDisplay(); SetDisplayActive(true); } /// /// Deactivates the display with . /// protected override void Stopping() { base.Stopping(); SetDisplayActive(false); } // IArucoCameraDisplay methods public virtual void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation) { var parent = arucoObject.transform.parent; arucoObject.transform.SetParent(Cameras[cameraId].transform); arucoObject.transform.localPosition = localPosition; arucoObject.transform.localRotation = localRotation; arucoObject.transform.SetParent(parent); arucoObject.gameObject.SetActive(true); } // Methods /// /// Configures the and the according to the /// if set otherwise with default values. /// protected virtual void ConfigureDisplay() { // Sets the background texture for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Backgrounds[cameraId].material.mainTexture = ArucoCamera.Textures[cameraId]; } // Cameras and background configurations if (ArucoCameraUndistortion == null) { ConfigureDefaultBackgrounds(); } else { for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { ConfigureRectifiedCamera(cameraId); ConfigureRectifiedBackground(cameraId); } } } /// /// Activates or deactivates the , the and the . /// /// True to activate, false to deactivate. protected virtual void SetDisplayActive(bool value) { for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Cameras[cameraId].gameObject.SetActive(value); BackgroundCameras[cameraId].gameObject.SetActive(value); Backgrounds[cameraId].gameObject.SetActive(value); } } /// /// Places the in front of the corresponding centered and scaled to fit in the /// camera view. /// protected virtual void ConfigureDefaultBackgrounds() { for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { Vector3 localScale = Vector3.one; if (BackgroundCameras[cameraId].aspect < ArucoCamera.ImageRatios[cameraId]) { localScale.x = 2f * cameraBackgroundDistance * BackgroundCameras[cameraId].aspect * Mathf.Tan(0.5f * BackgroundCameras[cameraId].fieldOfView * Mathf.Deg2Rad); localScale.y = localScale.x / ArucoCamera.ImageRatios[cameraId]; } else { localScale.y = 2f * cameraBackgroundDistance * Mathf.Tan(0.5f * BackgroundCameras[cameraId].fieldOfView * Mathf.Deg2Rad); localScale.x = localScale.y * ArucoCamera.ImageRatios[cameraId]; } Backgrounds[cameraId].transform.localPosition = new Vector3(0, 0, cameraBackgroundDistance); Backgrounds[cameraId].transform.localScale = localScale; } } /// /// Configures the field of view of a according to the vertical focal length of the corresponding rectified camera matrix /// in . If the camera targets an eye in VR mode, Unity has already configured it. /// /// The id of the camera to configure. protected virtual void ConfigureRectifiedCamera(int cameraId) { float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId]; Vector2 cameraF = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths(); float fovY = 2f * Mathf.Atan(0.5f * imageHeight / cameraF.y) * Mathf.Rad2Deg; Cameras[cameraId].fieldOfView = fovY; BackgroundCameras[cameraId].fieldOfView = fovY; } /// /// Places a in front of the corresponding centered with the principal point of the /// corresponding rectified camera matrix in and scaled to fit in the field of /// view calculated from the focal lengths of the rectified camera matrix. /// /// The id of the background and the background camera to configure. protected virtual void ConfigureRectifiedBackground(int cameraId) { float imageWidth = ArucoCameraUndistortion.CameraParameters.ImageWidths[cameraId]; float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId]; Vector2 focalLength = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths(); Vector2 principalPoint = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraPrincipalPoint(); // Considering https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html, we are looking for X=posX and Y=posY // with x=0.5*ImageWidth, y=0.5*ImageHeight (center of the camera projection) and w=Z=cameraBackgroundDistance float localPositionX = (0.5f * imageWidth - principalPoint.x) / focalLength.x * cameraBackgroundDistance; float localPositionY = -(0.5f * imageHeight - principalPoint.y) / focalLength.y * cameraBackgroundDistance; // a minus because OpenCV camera coordinates origin is top - left, but bottom-left in Unity // Considering https://stackoverflow.com/a/41137160 // scale.x = 2 * cameraBackgroundDistance * tan(fovx / 2), cameraF.x = imageWidth / (2 * tan(fovx / 2)) float localScaleX = imageWidth / focalLength.x * cameraBackgroundDistance; float localScaleY = imageHeight / focalLength.y * cameraBackgroundDistance; // Place and scale the background Backgrounds[cameraId].transform.localPosition = new Vector3(localPositionX, localPositionY, cameraBackgroundDistance); Backgrounds[cameraId].transform.localScale = new Vector3(localScaleX, localScaleY, 1); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplay.cs.meta ================================================ fileFormatVersion: 2 guid: c881fcd8bdf848a4ea1a8d790da8bd53 timeCreated: 1525361538 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplayGeneric.cs ================================================ using ArucoUnity.Cameras.Undistortions; using UnityEngine; namespace ArucoUnity.Cameras.Displays { public abstract class ArucoCameraDisplayGeneric : ArucoCameraDisplay where T : ArucoCamera where U : ArucoCameraUndistortion { // Editor fields [SerializeField] [Tooltip("The camera to use.")] private T arucoCamera; [SerializeField] [Tooltip("The optional undistortion process associated with the ArucoCamera.")] private U arucoCameraUndistortion; // MonoBehaviour methods /// /// Sets and /// from editor fields if not nulls. /// protected override void Awake() { base.Awake(); if (arucoCamera != null) { ArucoCamera = arucoCamera; } if (arucoCameraUndistortion != null) { ArucoCameraUndistortion = arucoCameraUndistortion; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplayGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: 78197734d3ee6ef4e93ec29bd16d638d timeCreated: 1511299097 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/IArucoCameraDisplay.cs ================================================ using ArucoUnity.Cameras.Undistortions; using UnityEngine; namespace ArucoUnity.Cameras.Displays { /// /// Manages Unity virual cameras that shoot 3D content aligned with the displayed as background. It /// creates the augmented reality effect by aligning the images from the physical cameras and the tracked by /// . /// public interface IArucoCameraDisplay : IArucoCameraController { // Properties /// /// Gets the optional undistortion process associated with the ArucoCamera. /// IArucoCameraUndistortion ArucoCameraUndistortion { get; set; } /// /// Gets the Unity virtual camera that will shoot the 3D content aligned with the . /// Camera[] Cameras { get; } /// /// Gets the Unity virtual camera that will shoot the . /// Camera[] BackgroundCameras { get; } /// /// Gets the backgrounds displaying the of the corresponding physical camera in ArucoCamera. /// Renderer[] Backgrounds { get; } // Methods /// /// Updates the transform of an ArUco object. /// /// The transfomr to the ArUco object to place. /// The id of the camera to use. The transform is placed and oriented relative to this camera. /// The estimated translation of the transform relative to the camera. /// The estimated rotation of the transform relative to the camera. void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/IArucoCameraDisplay.cs.meta ================================================ fileFormatVersion: 2 guid: 76381d563874ef044b1ae4e14cb1f5fa timeCreated: 1511474824 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/MonoArucoCameraDisplay.cs ================================================ using ArucoUnity.Cameras.Undistortions; using System; using UnityEngine; namespace ArucoUnity.Cameras.Displays { /// /// Displays a mono . /// public class MonoArucoCameraDisplay : ArucoCameraDisplayGeneric { // Editor fields [SerializeField] [Tooltip("The Unity virtual camera that will shoot the 3D content aligned with the background.")] private Camera[] cameras; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the background.")] private Camera[] backgroundCameras; [SerializeField] [Tooltip("The background displaying the image of the corresponding physical camera in ArucoCamera.")] private Renderer[] backgrounds; // ArucoCameraGenericDisplay properties public override Camera[] Cameras { get { return cameras; } protected set { cameras = value; } } public override Camera[] BackgroundCameras { get { return backgroundCameras; } protected set { backgroundCameras = value; } } public override Renderer[] Backgrounds { get { return backgrounds; } protected set { backgrounds = value; } } /// /// Resizes the length of the , and /// editor fields to if different. /// protected virtual void OnValidate() { if (ArucoCamera != null) { if (cameras != null && cameras.Length != ArucoCamera.CameraNumber) { Array.Resize(ref cameras, ArucoCamera.CameraNumber); } if (backgroundCameras != null && backgroundCameras.Length != ArucoCamera.CameraNumber) { Array.Resize(ref backgroundCameras, ArucoCamera.CameraNumber); } if (backgrounds != null && backgrounds.Length != ArucoCamera.CameraNumber) { Array.Resize(ref backgrounds, ArucoCamera.CameraNumber); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/MonoArucoCameraDisplay.cs.meta ================================================ fileFormatVersion: 2 guid: c26a913db0c57924296019074a504016 timeCreated: 1510963893 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/StereoArucoCameraDisplay.cs ================================================ using ArucoUnity.Cameras.Undistortions; using UnityEngine; namespace ArucoUnity.Cameras.Displays { /// /// Displays a . /// public class StereoArucoCameraDisplay : ArucoCameraDisplayGeneric { // Editor fields [SerializeField] [Tooltip("The container of the leftCamera and the leftBackgroundCamera.")] private Transform leftEye; [SerializeField] [Tooltip("The container of the rightCamera and the rightBackgroundCamera.")] private Transform rightEye; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the 3D content aligned with the left background.")] private Camera leftCamera; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the 3D content aligned with the right background.")] private Camera rightCamera; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the left eye background.")] private Camera leftBackgroundCamera; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the right eye background.")] private Camera rightBackgroundCamera; [SerializeField] [Tooltip("The background displaying the image of the left physical camera in ArucoCamera.")] private Renderer leftBackground; [SerializeField] [Tooltip("The background displaying the image of the right physical camera in ArucoCamera.")] private Renderer rightBackground; // Properties /// /// Gets or sets the containers of the and the /// . /// public Transform[] Eyes { get; protected set; } // Variables protected Vector3 backgroundsPositionOffset = Vector3.zero; // MonoBehaviour methods /// /// Sets , , /// and /// from editor fields if not nulls. /// protected override void Awake() { base.Awake(); Eyes = new Transform[StereoArucoCamera.StereoCameraNumber]; Eyes[StereoArucoCamera.CameraId1] = leftEye; Eyes[StereoArucoCamera.CameraId2] = rightEye; Cameras = new Camera[StereoArucoCamera.StereoCameraNumber]; Cameras[StereoArucoCamera.CameraId1] = leftCamera; Cameras[StereoArucoCamera.CameraId2] = rightCamera; BackgroundCameras = new Camera[StereoArucoCamera.StereoCameraNumber]; BackgroundCameras[StereoArucoCamera.CameraId1] = leftBackgroundCamera; BackgroundCameras[StereoArucoCamera.CameraId2] = rightBackgroundCamera; Backgrounds = new Renderer[StereoArucoCamera.StereoCameraNumber]; Backgrounds[StereoArucoCamera.CameraId1] = leftBackground; Backgrounds[StereoArucoCamera.CameraId2] = rightBackground; } // IArucoCameraDisplay methods public override void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation) { base.PlaceArucoObject(arucoObject, cameraId, localPosition, localRotation); float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1; arucoObject.transform.position += direction * backgroundsPositionOffset / 2 * localPosition.z; } // ArucoCameraDisplay methods protected override void ConfigureDisplay() { if (ArucoCameraUndistortion != null) { backgroundsPositionOffset = ArucoCameraUndistortion.CameraParameters.StereoCameraParameters.TranslationVector.ToPosition(); } base.ConfigureDisplay(); } // ArucoCameraDisplay methods /// /// Place the virtual cameras in the same placement than the physical cameras. /// /// The id of the camera to configure. protected override void ConfigureRectifiedCamera(int cameraId) { base.ConfigureRectifiedCamera(cameraId); float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1; Eyes[cameraId].transform.localPosition += backgroundsPositionOffset / 2; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/StereoArucoCameraDisplay.cs.meta ================================================ fileFormatVersion: 2 guid: 3648ba3f74da4164db2b440ad0fbe471 timeCreated: 1511291541 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/StereoVRArucoCameraDisplay.cs ================================================ using ArucoUnity.Cameras.Undistortions; using ArucoUnity.Utilities; using UnityEngine; namespace ArucoUnity.Cameras.Displays { /// /// Displays a in a VR HMD. /// public class StereoVRArucoCameraDisplay : ArucoCameraDisplayGeneric { // Editor fields [SerializeField] [Tooltip("The Unity stereo VR virtual camera that will shoot the 3D content aligned with the backgrounds.")] private Camera stereoVRCamera; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the left eye background.")] private Camera leftBackgroundCamera; [SerializeField] [Tooltip("The Unity virtual camera that will shoot the right eye background.")] private Camera rightBackgroundCamera; [SerializeField] [Tooltip("The background displaying the image of the left physical camera in ArucoCamera.")] private Renderer leftBackground; [SerializeField] [Tooltip("The background displaying the image of the right physical camera in ArucoCamera.")] private Renderer rightBackground; // Variables protected Vector3 backgroundsPositionOffset; protected float cameraFocalLength; protected float arucoObjectPlacementZFactor = 1f; // MonoBehaviour methods /// /// Populates , , /// and from editor fields if not nulls. /// protected override void Awake() { base.Awake(); Cameras = new Camera[StereoArucoCamera.StereoCameraNumber]; Cameras[StereoArucoCamera.CameraId1] = Cameras[StereoArucoCamera.CameraId2] = stereoVRCamera; BackgroundCameras = new Camera[StereoArucoCamera.StereoCameraNumber]; BackgroundCameras[StereoArucoCamera.CameraId1] = leftBackgroundCamera; BackgroundCameras[StereoArucoCamera.CameraId2] = rightBackgroundCamera; Backgrounds = new Renderer[StereoArucoCamera.StereoCameraNumber]; Backgrounds[StereoArucoCamera.CameraId1] = leftBackground; Backgrounds[StereoArucoCamera.CameraId2] = rightBackground; } // IArucoCameraDisplay methods public override void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation) { var parent = arucoObject.transform.parent; arucoObject.transform.SetParent(Cameras[cameraId].transform); float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1; arucoObject.transform.localPosition = new Vector3(localPosition.x, localPosition.y, arucoObjectPlacementZFactor * localPosition.z) + direction * backgroundsPositionOffset / 2; arucoObject.transform.localRotation = localRotation; arucoObject.transform.SetParent(parent); arucoObject.gameObject.SetActive(true); } // ArucoCameraDisplay methods /// /// Configure the backgrounds for VR mode. /// protected override void ConfigureDisplay() { base.ConfigureDisplay(); backgroundsPositionOffset = ArucoCameraUndistortion.CameraParameters.StereoCameraParameters.TranslationVector.ToPosition(); if (ArucoCameraUndistortion != null) { // Place the backgrounds to allow the eyes to fuse them in a VR HMD Backgrounds[StereoArucoCamera.CameraId1].transform.localPosition += backgroundsPositionOffset / 2; Backgrounds[StereoArucoCamera.CameraId2].transform.localPosition -= backgroundsPositionOffset / 2; // Adjust the stereo convergence of the background camera to the focal length BackgroundCameras[StereoArucoCamera.CameraId1].stereoConvergence = cameraFocalLength; BackgroundCameras[StereoArucoCamera.CameraId2].stereoConvergence = cameraFocalLength; } } /// /// Cancels the base class configuration of the virtual cameras as Unity already handles them. /// protected override void ConfigureRectifiedCamera(int cameraId) { } /// /// Places the taking account of the difference of the focal length between the VR /// and from . /// /// The id of the background and the background camera to configure. protected override void ConfigureRectifiedBackground(int cameraId) { float imageWidth = ArucoCameraUndistortion.CameraParameters.ImageWidths[cameraId]; float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId]; Vector2 focalLength = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths(); Vector2 principalPoint = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraPrincipalPoint(); cameraFocalLength = Cameras[cameraId].pixelHeight / (2f * Mathf.Tan(0.5f * Cameras[cameraId].fieldOfView * Mathf.Deg2Rad)); arucoObjectPlacementZFactor = cameraFocalLength / focalLength.y; float localPositionX = (0.5f * imageWidth - principalPoint.x) / cameraFocalLength * cameraBackgroundDistance; float localPositionY = -(0.5f * imageHeight - principalPoint.y) / cameraFocalLength * cameraBackgroundDistance; float localScaleX = imageWidth / cameraFocalLength * cameraBackgroundDistance; float localScaleY = imageHeight / cameraFocalLength * cameraBackgroundDistance; Backgrounds[cameraId].transform.localPosition = new Vector3(0f, 0f, cameraBackgroundDistance); Backgrounds[cameraId].transform.localScale = new Vector3(localScaleX, localScaleY, 1f); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays/StereoVRArucoCameraDisplay.cs.meta ================================================ fileFormatVersion: 2 guid: a808b35399551b34a8022e60eb9b09d3 timeCreated: 1512406688 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Displays.meta ================================================ fileFormatVersion: 2 guid: 28e26fdf81893c44aaed171094e4e508 folderAsset: yes timeCreated: 1510963842 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/IArucoCamera.cs ================================================ using ArucoUnity.Plugin; using ArucoUnity.Utilities; using System; using UnityEngine; namespace ArucoUnity.Cameras { /// /// Captures images of a camera. /// public interface IArucoCamera : IController { // Events /// /// Called when the have been updated. /// event Action ImagesUpdated; /// /// Callback to undistort and rectify the images in parameters. /// event Action UndistortRectifyImages; // Properties /// /// Gets the number of cameras in the system. /// int CameraNumber { get; } /// /// Gets the name of the camera system used. /// string Name { get; } /// /// Gets the the current images manipulated by Unity. There are images: one for each camera. /// Texture2D[] Textures { get; } /// /// Gets or sets the current images manipulated by OpenCV. There are images: one for each camera. /// Cv.Mat[] Images { get; } /// /// Gets the content. /// byte[][] ImageDatas { get; } /// /// Gets the size of each . /// int[] ImageDataSizes { get; } /// /// Gets the ratios of each . /// float[] ImageRatios { get; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/IArucoCamera.cs.meta ================================================ fileFormatVersion: 2 guid: 2c65708b17804334e8fc8f572b2364b3 timeCreated: 1511461003 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/IArucoCameraController.cs ================================================ using ArucoUnity.Utilities; namespace ArucoUnity.Cameras { /// /// Configurable controller using a . /// public interface IArucoCameraController : IController { // Properties /// /// Gets or sets the camera to use. /// IArucoCamera ArucoCamera { get; set; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/IArucoCameraController.cs.meta ================================================ fileFormatVersion: 2 guid: 9c2488c0150a5534bbaf572ec1408eba timeCreated: 1511474536 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParameters.cs ================================================ using ArucoUnity.Plugin; using System; using System.IO; using System.Xml.Serialization; namespace ArucoUnity.Cameras.Parameters { /// /// Manage the camera parameters from a calibration. /// [Serializable] public class ArucoCameraParameters { // Constructors /// /// Create an empty CameraParameters and set to now. /// /// This constructor is needed for the serialization. public ArucoCameraParameters() { } /// /// Initialize the properties. /// /// The number of camera in the camera system. Must be equal to the number of cameras of the related /// . public ArucoCameraParameters(int camerasNumber) { CalibrationDateTime = DateTime.Now; CameraNumber = camerasNumber; ImageHeights = new int[CameraNumber]; ImageWidths = new int[CameraNumber]; ReprojectionErrors = new double[CameraNumber]; CameraMatrices = new Cv.Mat[CameraNumber]; CameraMatricesValues = new double[CameraNumber][][]; DistCoeffs = new Cv.Mat[CameraNumber]; DistCoeffsValues = new double[CameraNumber][][]; OmnidirXis = new Cv.Mat[CameraNumber]; OmnidirXisValues = new double[CameraNumber][][]; } // Properties /// /// The calibration date and time. /// public DateTime CalibrationDateTime { get; set; } /// /// The number of the camera during the calibration. /// public int CameraNumber { get; set; } /// /// The image height during the calibration. /// public int[] ImageHeights { get; set; } /// /// The image width during the calibration. /// public int[] ImageWidths { get; set; } /// /// The calibration flags used. /// public int CalibrationFlagsValue { get; set; } /// /// Non null if there is a fix image aspect ratio. /// public float FixAspectRatioValue { get; set; } /// /// The average re-projection error of the calibration. /// public double[] ReprojectionErrors { get; set; } /// /// The camera matrices of the calibration. /// /// When is called, it's serialized with the and /// properties. [XmlIgnore] public Cv.Mat[] CameraMatrices { get; set; } /// /// The camera matrix type of the calibration. Equals to and automatically written when /// is called. /// /// This property is be public for the serialization. public Cv.Type CameraMatricesType { get; set; } /// /// The camera matrix values of the calibration. Equals to the content and automatically written when /// is called. /// /// This property is be public for the serialization. public double[][][] CameraMatricesValues { get; set; } /// /// The distorsition coefficients of the calibration. /// /// When is called, it's serialized with the and /// properties. [XmlIgnore] public Cv.Mat[] DistCoeffs { get; set; } /// /// The distorsition coefficients type of the calibration. Equals to and automatically written when /// is called. /// /// This property is be public for the serialization. public Cv.Type DistCoeffsType { get; set; } /// /// The distorsition coefficients values of the calibration. Equals to the content and automatically written when /// is called. /// /// This property is be public for the serialization. public double[][][] DistCoeffsValues { get; set; } /// /// The xi parameter used in the omnidir calibration process (ccalib module). /// /// When is called, it's serialized with the and /// properties. [XmlIgnore] public Cv.Mat[] OmnidirXis { get; set; } /// /// The xi parameter type of the calibration. Equals to and automatically written when /// is called. /// /// This property is be public for the serialization. public Cv.Type OmnidirXisType { get; set; } /// /// The xi parameter values of the calibration. Equals to the content and automatically written when /// is called. /// /// This property is be public for the serialization. public double[][][] OmnidirXisValues { get; set; } /// /// Parameters from possible stereo calibration on the camera system. /// public StereoArucoCameraParameters StereoCameraParameters { get; set; } /// /// The file path of the parameters. /// [XmlIgnore] public string FilePath { get; protected set; } // Variables protected Cv.Mat[] cameraMatrices; // Methods /// /// Create a new CameraParameters object from a previously saved camera parameters XML file. /// /// The file path to load. /// If the camera parameters couldn't be loaded because of a wrong file path. /// The CameraParameters loaded from the XML file or null if the file coulnd't be loaded. public static ArucoCameraParameters LoadFromXmlFile(string cameraParametersFilePath) { ArucoCameraParameters cameraParameters = null; // Try to load the file and deserialize it StreamReader reader = null; try { reader = new StreamReader(cameraParametersFilePath); XmlSerializer serializer = new XmlSerializer(typeof(ArucoCameraParameters)); cameraParameters = serializer.Deserialize(reader) as ArucoCameraParameters; } catch (Exception ex) { throw new ArgumentException("Couldn't load the camera parameters file path '" + cameraParametersFilePath + ". ", "cameraParametersFilePath", ex); } finally { if (reader != null) { reader.Close(); } } cameraParameters.FilePath = cameraParametersFilePath; // Populate non-serialized properties cameraParameters.CameraMatrices = CreateProperty(cameraParameters.CameraMatricesType, cameraParameters.CameraMatricesValues); cameraParameters.DistCoeffs = CreateProperty(cameraParameters.DistCoeffsType, cameraParameters.DistCoeffsValues); cameraParameters.OmnidirXis = CreateProperty(cameraParameters.OmnidirXisType, cameraParameters.OmnidirXisValues); // Populate non-serialized properties of the stereo camera parameters if (cameraParameters.StereoCameraParameters != null) { cameraParameters.StereoCameraParameters.UpdateNonSerializedProperties(); } return cameraParameters; } /// /// Save the camera parameters to a XML file. /// /// The file path where to save the object. /// If the camera parameters couldn't be saved because of a wrong file path. public void SaveToXmlFile(string cameraParametersFilePath) { // Update CameraMatrixValues and CameraMatrixType CameraMatricesType = CameraMatrices[0].Type(); UpdatePropertyValues(CameraMatrices, CameraMatricesValues); // Update DistCoeffsValues and DistCoeffsType DistCoeffsType = DistCoeffs[0].Type(); UpdatePropertyValues(DistCoeffs, DistCoeffsValues); // Update OmnidirXisValues and OmnidirXisType OmnidirXisType = OmnidirXis[0].Type(); UpdatePropertyValues(OmnidirXis, OmnidirXisValues); // Update properties for serialization of the stereo camera parameters if (StereoCameraParameters != null) { StereoCameraParameters.UpdateSerializedProperties(); } // Try to serialize the object and save it to the file StreamWriter writer = null; try { writer = new StreamWriter(cameraParametersFilePath); XmlSerializer serializer = new XmlSerializer(typeof(ArucoCameraParameters)); serializer.Serialize(writer, this); } catch { throw new ArgumentException("Couldn't save the camera parameters to the file path '" + cameraParametersFilePath + ".", "cameraParametersFilePath"); } finally { if (writer != null) { writer.Close(); } } } /// /// Update the value from . /// internal static void UpdatePropertyValues(Cv.Mat[] property, double[][][] propertyValues) { int cameraNumber = property.Length, rows = property[0].Rows, cols = property[0].Cols; for (int cameraId = 0; cameraId < cameraNumber; cameraId++) { propertyValues[cameraId] = new double[rows][]; for (int i = 0; i < rows; i++) { propertyValues[cameraId][i] = new double[cols]; for (int j = 0; j < cols; j++) { propertyValues[cameraId][i][j] = property[cameraId].AtDouble(i, j); } } } } /// /// Return a property created from a type and a array of values. /// /// The type of the property. /// The content of the propery. /// The property internal static Cv.Mat[] CreateProperty(Cv.Type propertyType, double[][][] propertyValues) { int cameraNumber = propertyValues.Length; var property = new Cv.Mat[cameraNumber]; for (int cameraId = 0; cameraId < cameraNumber; cameraId++) { int rows = propertyValues[cameraId].Length, cols = (rows > 0) ? propertyValues[cameraId][0].Length : 0; property[cameraId] = new Cv.Mat(rows, cols, propertyType); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { property[cameraId].AtDouble(i, j, propertyValues[cameraId][i][j]); } } } return property; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParameters.cs.meta ================================================ fileFormatVersion: 2 guid: 1ee443b0d14275d48a5578ced21edb2b timeCreated: 1476928990 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParametersController.cs ================================================ using System; using System.IO; using UnityEngine; namespace ArucoUnity.Cameras.Parameters { /// /// Editor controller for . /// public class ArucoCameraParametersController : MonoBehaviour, IHasArucoCameraParameters { // Constants /// /// The folder where to load and save the files, relative to /// . /// protected const string CameraParametersFolderPath = "ArucoUnity"; // Editor fields [SerializeField] [Tooltip("Automatically load the camera parameters file at start.")] private bool autoLoadFile = true; [SerializeField] [Tooltip("The xml file where to load and save the camera parameters, relative to Streaming Assets.")] private string cameraParametersFilename; // IHasArucoCameraParameters properties /// /// Gets or sets the . /// public ArucoCameraParameters CameraParameters { get; set; } // Properties /// /// Gets or sets if automatically at . /// public bool AutoLoadFile { get { return autoLoadFile; } set { autoLoadFile = value; } } /// /// Gets or sets the xml file corresponding to the , relative to . /// public string CameraParametersFilename { get { return cameraParametersFilename; } set { cameraParametersFilename = value; } } // Variables protected string cameraParametersPath; // MonoBehaviour methods /// /// Calls if is true. /// protected virtual void Awake() { cameraParametersPath = Path.Combine(Application.streamingAssetsPath, CameraParametersFolderPath, cameraParametersFilename); if (AutoLoadFile) { Load(); } } // Methods /// /// Initializes with /// /// The number of cameras in the calibrated camera system. public virtual void Initialize(int cameraNumber) { CameraParameters = new ArucoCameraParameters(cameraNumber); } /// /// Initializes with . /// public virtual void Load() { CameraParameters = ArucoCameraParameters.LoadFromXmlFile(cameraParametersPath); } /// /// Calls . Creates before the /// folder before if necessary. /// public virtual void Save() { if (!Directory.Exists(CameraParametersFolderPath)) { Directory.CreateDirectory(CameraParametersFolderPath); } CameraParameters.SaveToXmlFile(cameraParametersPath); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParametersController.cs.meta ================================================ fileFormatVersion: 2 guid: 840bd5ba574119a4480742f7e43829df timeCreated: 1510782083 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoStereoCameraParameters.cs ================================================ using ArucoUnity.Plugin; using System; using System.Xml.Serialization; namespace ArucoUnity.Cameras.Parameters { /// /// Manages the camera parameters of a stereo camera calibration. /// [Serializable] public class StereoArucoCameraParameters { // Const public const int CameraNumber = 2; // Constructors /// /// Creates an empty StereoCameraParameters. /// /// This constructor is needed for the serialization. public StereoArucoCameraParameters() { } // Properties /// /// Gets or sets the stereo calibration flags used. /// public int CalibrationFlagsValue { get; set; } /// /// Gets or sets the rotation vector between the first and the second camera coordinate systems. /// /// When is called, it's copied to the property. [XmlIgnore] public Cv.Vec3d RotationVector { get; set; } /// /// Gets or sets the rotation matrix values between the coordinate systems of the cameras. Equals to the /// content and automatically written when is called. /// /// This property is be public for the serialization. public double[] RotationVectorValues { get; set; } /// /// Gets or sets the translation vector between the coordinate systems of the cameras. /// /// When is called, it's copied to the /// property. [XmlIgnore] public Cv.Vec3d TranslationVector { get; set; } /// /// Gets or sets the translation vector values between the coordinate systems of the cameras. Equals to the /// content and automatically written when is called. /// /// This property is be public for the serialization. public double[] TranslationVectorValues { get; set; } /// /// Gets or sets the average re-projection error of the calibration. /// public double ReprojectionError { get; set; } // Methods /// /// Updates the serialized properties from the non serialized properties. /// public void UpdateSerializedProperties() { RotationVectorValues = new double[3] { RotationVector.Get(0), RotationVector.Get(1), RotationVector.Get(2) }; TranslationVectorValues = new double[3] { TranslationVector.Get(0), TranslationVector.Get(1), TranslationVector.Get(2) }; } /// /// Initializes the non serialized properties from the serialized properties. /// public void UpdateNonSerializedProperties() { RotationVector = new Cv.Vec3d(RotationVectorValues[0], RotationVectorValues[1], RotationVectorValues[2]); TranslationVector = new Cv.Vec3d(TranslationVectorValues[0], TranslationVectorValues[1], TranslationVectorValues[2]); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoStereoCameraParameters.cs.meta ================================================ fileFormatVersion: 2 guid: 4c416e1b8c63a0e46ace6e4a9b44d9b8 timeCreated: 1491407298 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/IHasArucoCameraParameters.cs ================================================ namespace ArucoUnity.Cameras.Parameters { /// /// Contains a . /// public interface IHasArucoCameraParameters { // Properties /// /// Gets or sets the camera parameters. /// ArucoCameraParameters CameraParameters { get; set; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters/IHasArucoCameraParameters.cs.meta ================================================ fileFormatVersion: 2 guid: 48f0227fb683cf945864f898edd64296 timeCreated: 1511543026 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Parameters.meta ================================================ fileFormatVersion: 2 guid: f59cd119a04bf78458877edfadd540b1 folderAsset: yes timeCreated: 1491407271 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/StereoArucoCamera.cs ================================================ namespace ArucoUnity.Cameras { /// /// Captures images of stereo camera. /// public abstract class StereoArucoCamera : ArucoCamera { // Constants public const int StereoCameraNumber = 2; // IArucoCamera properties public override int CameraNumber { get { return StereoCameraNumber; } } // Properties /// /// Gets the id of the first camera. /// public static int CameraId1 { get { return 0; } } /// /// Gets the id of the second camera. /// public static int CameraId2 { get { return 1; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/StereoArucoCamera.cs.meta ================================================ fileFormatVersion: 2 guid: ab4c5dd9ee281e34d901146f8c446c19 timeCreated: 1511204990 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/StereoArucoWebcam.cs ================================================ using ArucoUnity.Utilities; using System; using UnityEngine; namespace ArucoUnity.Cameras { /// /// Captures image of a stereoscopic webcam. /// public class StereoArucoWebcam : StereoArucoCamera { // Editor fields [SerializeField] [Tooltip("The id of the first webcam to use.")] private int webcamId1; [SerializeField] [Tooltip("The id of the second webcam to use.")] private int webcamId2; // IArucoCamera properties public override string Name { get; protected set; } // Properties /// /// Gets or sets the id of the first webcam to use. /// public int WebcamId1 { get { return webcamId1; } set { webcamId1 = value; } } /// /// Gets or sets the id of the second webcam to use. /// public int WebcamId2 { get { return webcamId2; } set { webcamId2 = value; } } /// /// Gets the controller of the webcam to use. /// public WebcamController WebcamController { get; private set; } // MonoBehaviour methods /// /// Initializes and subscribes to. /// protected override void Awake() { base.Awake(); WebcamController = gameObject.AddComponent(); WebcamController.Started += WebcamController_Started; } /// /// Unsubscribes to . /// protected override void OnDestroy() { base.OnDestroy(); WebcamController.Started -= WebcamController_Started; } // ConfigurableController methods /// /// Calls and sets . /// protected override void Configuring() { base.Configuring(); WebcamController.Ids.Clear(); WebcamController.Ids.AddRange(new int[] { WebcamId1, WebcamId2 }); WebcamController.Configure(); Name = "'" + WebcamController.Devices[CameraId1].name + "'+'" + WebcamController.Devices[CameraId2].name + "'"; } /// /// Calls . /// protected override void Starting() { base.Starting(); WebcamController.StartWebcams(); } /// /// Blocks until . /// protected override void OnStarted() { } // ArucoCamera methods /// /// Copy current webcam images to . /// protected override bool UpdatingImages() { for (int cameraId = 0; cameraId < CameraNumber; cameraId++) { Array.Copy(WebcamController.Textures2D[cameraId].GetRawTextureData(), NextImageDatas[cameraId], ImageDataSizes[cameraId]); } return true; } // Methods /// /// Configures and calls . /// protected virtual void WebcamController_Started(WebcamController webcamController) { for (int cameraId = 0; cameraId < CameraNumber; cameraId++) { var webcamTexture = WebcamController.Textures2D[cameraId]; Textures[cameraId] = new Texture2D(webcamTexture.width, webcamTexture.height, webcamTexture.format, false); } base.OnStarted(); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/StereoArucoWebcam.cs.meta ================================================ fileFormatVersion: 2 guid: c82860b96c21f994bad617778c197a4b timeCreated: 1511208240 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortion.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; using UnityEngine; using System; using ArucoUnity.Utilities; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the processes of undistortion and rectification of . It's a time-consuming /// operation but it's necessary for cameras with an important distorsion for a good alignement of the images with /// the 3D content. Base class to reference in editor fields. /// public abstract class ArucoCameraUndistortion : ArucoCameraController, IArucoCameraUndistortion { // Constants public const int undistortionCameraMapsNumber = 2; // Editor fields [SerializeField] [Tooltip("The camera parameters associated with the ArucoCamera.")] private ArucoCameraParametersController CameraParametersController; // IArucoCameraUndistortion properties public ArucoCameraParameters CameraParameters { get; set; } public Cv.Mat[] RectifiedCameraMatrices { get; protected set; } public Cv.Mat[] RectificationMatrices { get; protected set; } public Cv.Mat[] UndistortedDistCoeffs { get; private set; } public Cv.Mat[][] UndistortionRectificationMaps { get; protected set; } // Variables protected Cv.Mat noRectificationMatrix = new Cv.Mat(); protected Cv.Mat noDistCoeffs = new Cv.Mat(); protected Cv.Rect noROI = new Cv.Rect(); protected string CameraParametersFilePath; protected ArucoCameraSeparateThread remapThread; // MonoBehaviour methods /// /// Initializes the properties. /// protected override void Start() { if (CameraParameters == null && CameraParametersController != null) { CameraParameters = CameraParametersController.CameraParameters; } base.Start(); } // ConfigurableController methods /// /// Initializes the properties from . /// protected override void Configuring() { base.Configuring(); if (CameraParameters == null) { throw new ArgumentNullException("CameraParameters", "This property needs to be set for the configuration."); } if (CameraParameters.CameraNumber != ArucoCamera.CameraNumber) { throw new Exception("The number of cameras in CameraParameters must be equal to the number of cameras in ArucoCamera"); } RectifiedCameraMatrices = new Cv.Mat[CameraParameters.CameraNumber]; RectificationMatrices = new Cv.Mat[CameraParameters.CameraNumber]; UndistortedDistCoeffs = new Cv.Mat[CameraParameters.CameraNumber]; UndistortionRectificationMaps = new Cv.Mat[CameraParameters.CameraNumber][]; for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { UndistortedDistCoeffs[cameraId] = noDistCoeffs; UndistortionRectificationMaps[cameraId] = new Cv.Mat[undistortionCameraMapsNumber]; } } /// /// Calls and and susbcribes to /// . /// protected override void Starting() { base.Starting(); InitializeRectification(); InitializeUndistortionMaps(); ArucoCamera.UndistortRectifyImages += ArucoCamera_UndistortRectifyImages; remapThread = new ArucoCameraSeparateThread(ArucoCamera, UndistortRectifyImages) { CopyBackImages = true }; remapThread.Start(); } /// /// Unsusbcribes from . /// protected override void Stopping() { base.Stopping(); remapThread.Stop(); ArucoCamera.UndistortRectifyImages -= ArucoCamera_UndistortRectifyImages; } // Methods /// /// Updates the undistortion thread with the and stops if there was an exception from this thread. /// protected virtual void ArucoCamera_UndistortRectifyImages(Cv.Mat[] images, byte[][] imageDatas) { try { remapThread.Update(imageDatas); } catch (Exception e) { StopController(); throw e; } } /// /// Undistorts and rectifies the using on a separate thread. /// protected virtual void UndistortRectifyImages(Cv.Mat[] images) { for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { Cv.Remap(images[cameraId], images[cameraId], UndistortionRectificationMaps[cameraId][0], UndistortionRectificationMaps[cameraId][1], Cv.InterpolationFlags.Linear); } } /// /// Initializes the of each camera image. /// protected abstract void InitializeRectification(); /// /// Initializes the of each camera image. /// protected abstract void InitializeUndistortionMaps(); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: 81ba459c3933f8b44b4919b64953b03f timeCreated: 1510602529 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortionGeneric.cs ================================================ using UnityEngine; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the processes of undistortion and rectification of . Generic class to /// inherit, not the base class. /// public abstract class ArucoCameraUndistortionGeneric : ArucoCameraUndistortion, IArucoCameraUndistortion where T : ArucoCamera { // Editor fields [SerializeField] [Tooltip("The camera to use.")] private T arucoCamera; // MonoBehaviour properties /// /// Sets with editor field if not null. /// protected override void Awake() { base.Awake(); if (arucoCamera != null) { ArucoCamera = arucoCamera; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortionGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: b325fda4007f4d649a5b8025cbf2f6ad timeCreated: 1525414217 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/IArucoCameraUndistortion.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the processes of undistortion and rectification of . /// public interface IArucoCameraUndistortion : IArucoCameraController, IHasArucoCameraParameters { // Properties /// /// Gets the new camera matrices of the undistorted and rectified images of each camera. /// Cv.Mat[] RectifiedCameraMatrices { get; } /// /// Gets the rectification rotation matrices of each camera to make both camera image planes the same plane, in /// case of a stereo camera. /// Cv.Mat[] RectificationMatrices { get; } /// /// Gets the distorsion coefficients of the undistorted and rectified images of each camera. /// Cv.Mat[] UndistortedDistCoeffs { get; } /// /// Gets the undistortion and rectification images transformation map of each camera (two maps per camera). /// Cv.Mat[][] UndistortionRectificationMaps { get; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/IArucoCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: 503496346a1fac84c9bac4583d44aed1 timeCreated: 1511474987 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortion.cs ================================================ namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for fisheye and omnidir . /// public class OmnidirCameraUndistortion : OmnidirCameraUndistortionGeneric { } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: 6bb848ecd8f05544e9393e5735213780 timeCreated: 1511490576 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortionGeneric.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; using System; using System.Collections.Generic; using UnityEngine; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for fisheye and omnidir . /// /// See the OpenCV's ccalib module documentation for more information: /// http://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html /// public abstract class OmnidirCameraUndistortionGeneric : ArucoCameraUndistortionGeneric where T : ArucoCamera { /// /// The different algorithms to use for the undistortion of the images. /// public enum RectificationTypes { Perspective, Cylindrical, LongitudeLatitude, Stereographic } // Constants protected const float minPerspectiveFov = 1f; protected const float maxPerspectiveFov = 179f; // Editor fields [SerializeField] [Tooltip("The algorithm to use for the recitification of the images.")] private RectificationTypes rectificationType = RectificationTypes.Perspective; [SerializeField] [Tooltip("The desired field of view for the Unity cameras shooting the undistorted and rectified images.")] [Range(1f, 179f)] private float[] perspectiveFieldOfViews; // Properties /// /// Gets or sets the algorithm to use for the rectification of the images. See this tutorial for illustrated examples: /// https://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html /// public RectificationTypes RectificationType { get { return rectificationType; } set { rectificationType = value; } } /// /// Gets or sets the desired field of view for the Unity cameras shooting the undistorted and rectified images. /// public float[] PerspectiveFieldOfViews { get { return perspectiveFieldOfViews; } set { perspectiveFieldOfViews = value; } } // Variables protected Dictionary rectifyFlags = new Dictionary() { { RectificationTypes.Perspective, Cv.Omnidir.Rectifify.Perspective }, { RectificationTypes.Cylindrical, Cv.Omnidir.Rectifify.Cylindrical }, { RectificationTypes.LongitudeLatitude, Cv.Omnidir.Rectifify.Longlati }, { RectificationTypes.Stereographic, Cv.Omnidir.Rectifify.Stereographic } }; // MonoBehaviour methods /// /// Resizes the length of the editor field to if different. /// protected virtual void OnValidate() { if (ArucoCamera != null && perspectiveFieldOfViews != null && perspectiveFieldOfViews.Length != ArucoCamera.CameraNumber) { Array.Resize(ref perspectiveFieldOfViews, ArucoCamera.CameraNumber); } } // ConfigurableController methods /// /// Throw exception if length is different than . /// protected override void Configuring() { base.Configuring(); if (PerspectiveFieldOfViews.Length != ArucoCamera.CameraNumber) { throw new Exception("The number of cameras for the perspective desired field of view must be equal to the number of cameras in" + "ArucoCamera"); } } // ArucoCameraUndistortion methods /// /// Initializes the using the values for perspective rectification /// or uses the recommended values: https://docs.opencv.org/3.3.1/dd/d12/tutorial_omnidir_calib_main.html. Initializes the /// to identity matrix. /// protected override void InitializeRectification() { for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { float imageWidth = CameraParameters.ImageWidths[cameraId]; float imageHeight = CameraParameters.ImageHeights[cameraId]; if (RectificationType == RectificationTypes.Perspective) { float cameraFocalLength = imageHeight / (2f * Mathf.Tan(0.5f * PerspectiveFieldOfViews[cameraId] * Mathf.Deg2Rad)); RectifiedCameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F, new double[9] { cameraFocalLength, 0, imageWidth / 2, 0, cameraFocalLength, imageHeight / 2, 0, 0, 1 }).Clone(); } else { // Uses the camera matrix recommended values: https://docs.opencv.org/3.3.1/dd/d12/tutorial_omnidir_calib_main.html RectifiedCameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F, new double[9] { imageWidth / 3.1415, 0, 0, 0, imageHeight / 3.1415, 0, 0, 0, 1 }).Clone(); } RectificationMatrices[cameraId] = noRectificationMatrix; } } protected override void InitializeUndistortionMaps() { for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { Cv.Omnidir.InitUndistortRectifyMap(CameraParameters.CameraMatrices[cameraId], CameraParameters.DistCoeffs[cameraId], CameraParameters.OmnidirXis[cameraId], RectificationMatrices[cameraId], RectifiedCameraMatrices[cameraId], ArucoCamera.Images[cameraId].Size, Cv.Type.CV_16SC2, out UndistortionRectificationMaps[cameraId][0], out UndistortionRectificationMaps[cameraId][1], rectifyFlags[RectificationType]); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortionGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: 7e60ddc119b9d1c4785ec16ecef3fc6b timeCreated: 1510603602 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/StereoOmnidirCameraUndistortion.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; using System; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for fisheye and omnidir . /// public class StereoOmnidirCameraUndistortion : OmnidirCameraUndistortionGeneric { // Variables StereoArucoCameraParameters stereoCameraParameters; // ConfigurableController methods protected override void Configuring() { base.Configuring(); stereoCameraParameters = CameraParameters.StereoCameraParameters; if (stereoCameraParameters == null) { throw new Exception("The camera parameters must contains a valid StereoCameraParameters to undistort and" + " rectify a StereoArucoCamera."); } } // ArucoCameraUndistortion methods /// /// Initializes with the stereo camera parameters. /// protected override void InitializeRectification() { base.InitializeRectification(); Cv.Omnidir.StereoRectify(stereoCameraParameters.RotationVector, stereoCameraParameters.TranslationVector, out RectificationMatrices[StereoArucoCamera.CameraId1], out RectificationMatrices[StereoArucoCamera.CameraId2]); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/StereoOmnidirCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: 5dae30005f935a247b8bc82e262d5ab5 timeCreated: 1511490588 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir.meta ================================================ fileFormatVersion: 2 guid: 256380e4daa35074992ab9a06ce24ac1 folderAsset: yes timeCreated: 1511490259 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortion.cs ================================================ using ArucoUnity.Plugin; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for pinhole . /// public class PinholeCameraUndistortion : PinholeCameraUndistortionGeneric { // ArucoCameraUndistortion methods protected override void InitializeRectification() { for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { RectifiedCameraMatrices[cameraId] = Cv.GetOptimalNewCameraMatrix(CameraParameters.CameraMatrices[cameraId], CameraParameters.DistCoeffs[cameraId], ArucoCamera.Images[cameraId].Size, RectificationScalingFactor, ArucoCamera.Images[cameraId].Size, noROI, centerPrincipalPoint: true); RectificationMatrices[cameraId] = noRectificationMatrix; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: e044568ea72405e49bf56df52f9d2b57 timeCreated: 1510603613 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortionGeneric.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for pinhole cameras. /// /// See the OpenCV's calibd module documentation for more information: /// http://docs.opencv.org/3.4/d9/d0c/group__calib3d.html /// public abstract class PinholeCameraUndistortionGeneric : ArucoCameraUndistortionGeneric where T : ArucoCamera { // Editor fields [SerializeField] [Tooltip("Scaling factor (alpha coefficient) between 0 and 1: 0 to zoom the images so that only valid pixels are visible (no black areas" + " after rectification), 1 to shift the images so that no source image pixels are lost. Applied both on mono and stereo cameras.")] [Range(0, 1)] private float rectificationScalingFactor = 1; // Properties /// /// Gets or sets the scaling factor (alpha coefficient) between 0 and 1: 0 to zoom the images so that only valid pixels are visible (no black /// areas after rectification), 1 to shift the images so that no source image pixels are lost. Applied both on mono and stereo cameras. /// public float RectificationScalingFactor { get { return rectificationScalingFactor; } set { rectificationScalingFactor = value; } } // ArucoCameraUndistortion methods protected override void InitializeUndistortionMaps() { for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++) { Cv.InitUndistortRectifyMap(CameraParameters.CameraMatrices[cameraId], CameraParameters.DistCoeffs[cameraId], RectificationMatrices[cameraId], RectifiedCameraMatrices[cameraId], ArucoCamera.Images[cameraId].Size, Cv.Type.CV_16SC2, out UndistortionRectificationMaps[cameraId][0], out UndistortionRectificationMaps[cameraId][1]); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortionGeneric.cs.meta ================================================ fileFormatVersion: 2 guid: eb8072188d590ce47b56a21ea1068dee timeCreated: 1511490288 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/StereoPinholeCameraUndistortion.cs ================================================ using ArucoUnity.Cameras.Parameters; using ArucoUnity.Plugin; using System; using UnityEngine; namespace ArucoUnity.Cameras.Undistortions { /// /// Manages the undistortion and rectification process for pinhole . /// public class StereoPinholeCameraUndistortion : PinholeCameraUndistortionGeneric { // Editor fields [SerializeField] [Tooltip("If true (default), the principal points of the images have the same pixel coordinates in the rectified views. Only applied if" + "using a stereo camera.")] private bool rectificationZeroDisparity = true; // Properties /// /// Gets or sets if the principal point of the images have the same pixel coordinates in the rectified views (true by default). Only applied if /// using a stereo camera. /// public bool RectificationZeroDisparity { get { return rectificationZeroDisparity; } set { rectificationZeroDisparity = value; } } // Variables StereoArucoCameraParameters stereoCameraParameters; // ConfigurableController methods protected override void Configuring() { base.Configuring(); stereoCameraParameters = CameraParameters.StereoCameraParameters; if (stereoCameraParameters == null) { throw new Exception("The camera parameters must contains a valid StereoCameraParameters to undistort and rectify a StereoArucoCamera."); } } // ArucoCameraUndistortion methods protected override void InitializeRectification() { int cameraId1 = StereoArucoCamera.CameraId1; int cameraId2 = StereoArucoCamera.CameraId2; Cv.Mat rotationMatrix, rectificationMatrix1, rectificationMatrix2, newCameraMatrix1, newCameraMatrix2, disparityMatrix; Cv.StereoRectifyFlags stereoRectifyFlags = RectificationZeroDisparity ? Cv.StereoRectifyFlags.ZeroDisparity : 0; Cv.Rodrigues(stereoCameraParameters.RotationVector, out rotationMatrix); Cv.StereoRectify(CameraParameters.CameraMatrices[cameraId1], CameraParameters.DistCoeffs[cameraId1], CameraParameters.CameraMatrices[cameraId2], CameraParameters.DistCoeffs[cameraId2], ArucoCamera.Images[cameraId1].Size, rotationMatrix, stereoCameraParameters.TranslationVector, out rectificationMatrix1, out rectificationMatrix2, out newCameraMatrix1, out newCameraMatrix2, out disparityMatrix, stereoRectifyFlags, RectificationScalingFactor); RectifiedCameraMatrices[cameraId1] = newCameraMatrix1; RectifiedCameraMatrices[cameraId2] = newCameraMatrix2; RectificationMatrices[cameraId1] = rectificationMatrix1; RectificationMatrices[cameraId2] = rectificationMatrix2; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/StereoPinholeCameraUndistortion.cs.meta ================================================ fileFormatVersion: 2 guid: 41d0d6a753fcd62488e22edc074f8ac1 timeCreated: 1511489638 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole.meta ================================================ fileFormatVersion: 2 guid: 676a554959a49da44b4d3084e8559adb folderAsset: yes timeCreated: 1511490254 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras/Undistortions.meta ================================================ fileFormatVersion: 2 guid: 7e65fcdd22509254098fcc3f32db4f32 folderAsset: yes timeCreated: 1510714715 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Cameras.meta ================================================ fileFormatVersion: 2 guid: dba05ac3d122ff446becba0754ef3577 folderAsset: yes timeCreated: 1488568324 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Controller.cs ================================================ using System; using System.Collections.Generic; using UnityEngine; namespace ArucoUnity { /// /// Configurable and startable controller. /// /// /// It can have other configurable controllers as dependencies. They must have started before starting this /// controller. They stop this controller when one of them stops. /// public abstract class Controller : MonoBehaviour, IController { [SerializeField] [Tooltip("Start automatically when the configuration is done. Call alternatively StartController().")] private bool autoStart = true; /// /// Called when the controller is configured. /// public event EventHandler Configured = delegate { }; /// /// Called when the controller is configured and ready to be started, when all its dependencies started. /// public event EventHandler Ready = delegate { }; /// /// Called when the controller is started. /// public event EventHandler Started = delegate { }; /// /// Called when the controller is stopped. /// public event EventHandler Stopped = delegate { }; /// /// Gets or sets if configuring and starting automatically when when all dependencies started. Manually /// configure and start by calling and . /// public bool AutoStart { get { return autoStart; } set { SetAutoStart(value); } } /// /// Gets if the controller is configured. /// public bool IsConfigured { get; private set; } /// /// Gets if the controller is ready to be started when all dependencies have started. /// public bool IsReady { get; private set; } /// /// Gets if the controller is started. /// public bool IsStarted { get; private set; } private HashSet dependencies = new HashSet(); private HashSet stoppedDependencies = new HashSet(); /// /// Initializes the properties. /// protected virtual void Awake() { IsConfigured = false; IsStarted = false; } /// /// Calls . /// protected virtual void Start() { SetAutoStart(AutoStart); } /// /// Calls if it has been configured and started. /// protected virtual void OnDestroy() { if (IsStarted) { StopController(); } } /// /// Add a new dependency. The controller must be stopped. /// /// The dependency to add. public void AddDependency(IController dependency) { if (IsStarted) { throw new Exception("Stop the controller before updating the dependencies."); } dependencies.Add(dependency); if (!dependency.IsStarted) { stoppedDependencies.Add(dependency); } dependency.Started += DependencyStarted; dependency.Stopped += DependencyStopped; } /// /// Remove a dependency. The controller must be stopped. /// /// The dependency to remove. public void RemoveDependency(IController dependency) { if (IsStarted) { throw new Exception("Stop the controller before updating the dependencies."); } dependencies.Remove(dependency); stoppedDependencies.Remove(dependency); dependency.Started -= DependencyStarted; dependency.Stopped -= DependencyStopped; } /// /// Gets the list of the dependencies. /// /// The list of the dependencies of this instance. public List GetDependencies() { return new List(dependencies); } /// /// Configures the controller and calls the event. Properties must be set and the /// controller must be stopped. /// public void Configure() { if (IsStarted) { throw new Exception("Stop the controller before configure it."); } IsConfigured = false; IsReady = false; Configuring(); OnConfigured(); } /// /// Starts the controller and calls the event. The controller must be configured, ready and /// stopped. /// public void StartController() { if (!IsConfigured || !IsReady || IsStarted) { throw new Exception("Configure and stop the controller before start it."); } Starting(); OnStarted(); } /// /// Stops the controller and calls the event. The controller must be configured and started. /// public void StopController() { if (!IsConfigured || !IsStarted) { throw new Exception("Configure and start the controller before stop it."); } Stopping(); OnStopped(); } protected virtual void Configuring() { } /// /// Sets to true, calls and if all dependencies started calls /// . /// protected virtual void OnConfigured() { IsConfigured = true; Configured(this, EventArgs.Empty); if (stoppedDependencies.Count == 0) { OnReady(); } } protected virtual void Starting() { } /// /// Sets to true and calls . /// protected virtual void OnStarted() { IsStarted = true; Started(this, EventArgs.Empty); } protected virtual void Stopping() { } /// /// Sets to false and calls . /// protected virtual void OnStopped() { IsStarted = false; Stopped(this, EventArgs.Empty); } /// /// Calls if is true. /// private void SetAutoStart(bool value) { autoStart = value; if (AutoStart) { Configure(); } } /// /// Calls if the controller is configured and all the dependencies are started. /// private void DependencyStarted(object sender, EventArgs e) { var dependency = (IController)sender; stoppedDependencies.Remove(dependency); if (IsConfigured && stoppedDependencies.Count == 0) { OnReady(); } } /// /// Calls if the controller is started. /// private void DependencyStopped(object sender, EventArgs e) { var dependency = (IController)sender; stoppedDependencies.Add(dependency); if (IsStarted) { StopController(); } } /// /// Calls the event, and calls if is true. /// private void OnReady() { IsReady = true; Ready(this, EventArgs.Empty); if (AutoStart) { StartController(); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Controller.cs.meta ================================================ fileFormatVersion: 2 guid: aeb2c6c744fa71b40abda28d4a9896dd timeCreated: 1511886478 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/IController.cs ================================================ using System; using System.Collections.Generic; namespace ArucoUnity { /// /// Configurable and startable controller. /// /// /// It can have other configurable controllers as dependencies. They must have started before starting this /// controller. They stop this controller when one of them stops. /// public interface IController { /// /// Called when the controller is configured. /// event EventHandler Configured; /// /// Called when the controller is configured and ready to be started, when all its dependencies started. /// event EventHandler Ready; /// /// Called when the controller is started. /// event EventHandler Started; /// /// Called when the controller is stopped. /// event EventHandler Stopped; /// /// Gets or sets if configuring and starting automatically when when all dependencies started. Manually /// configure and start by calling and . /// bool AutoStart { get; set; } /// /// Gets if the controller is configured. /// bool IsConfigured { get; } /// /// Gets if the controller is ready to be started when all dependencies have started. /// bool IsReady { get; } /// /// Gets if the controller is started. /// bool IsStarted { get; } /// /// Add a new dependency. The controller must be stopped. /// /// The dependency to add. void AddDependency(IController dependency); /// /// Remove a dependency. The controller must be stopped. /// /// The dependency to remove. void RemoveDependency(IController dependency); /// /// Gets the list of the dependencies. /// /// The list of the dependencies of this instance. List GetDependencies(); /// /// Configures the controller and calls the event. Properties must be set and the /// controller must be stopped. /// void Configure(); /// /// Starts the controller and calls the event. The controller must be configured, ready and /// stopped. /// void StartController(); /// /// Stops the controller and calls the event. The controller must be configured and started. /// void StopController(); } } ================================================ FILE: Assets/ArucoUnity/Scripts/IController.cs.meta ================================================ fileFormatVersion: 2 guid: e8ad2868119317a4481bd473db76c543 timeCreated: 1511886511 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoBoard.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes the shared properties of the ArUco boards. /// public abstract class ArucoBoard : ArucoObject { // Editor fields [SerializeField] [Tooltip("The length of the margins around the board in pixels, used by Creators (default: 0).")] private int marginsLength; // Properties /// /// Gets or sets the length of the margins around the board in pixels, used by the Creators (default: 0). /// public int MarginsLength { get { return marginsLength; } set { OnPropertyUpdating(); marginsLength = value; OnPropertyUpdated(); } } /// /// Gets or sets the image size for drawing the board. /// public Vector2 ImageSize { get; protected set; } /// /// Gets or sets the associated board from the ArucoUnity plugin library. /// public Aruco.Board Board { get; protected set; } /// /// Gets or sets the length of the axis lines when drawn on the board. /// public float AxisLength { get; protected set; } /// /// Gets or sets the estimated rotation vector of the board when tracked. /// public Cv.Vec3d Rvec { get; set; } /// /// Gets or sets the estimated translation vector of the board when tracked. /// public Cv.Vec3d Tvec { get; set; } // MonoBehaviour methods /// /// Calls . /// protected override void Awake() { base.Awake(); UpdateBoard(); } // ArucoObject methods /// /// Calls and calls . /// protected override void UpdateProperties() { base.UpdateProperties(); UpdateBoard(); } /// /// Updates the properties. /// protected abstract void UpdateBoard(); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoBoard.cs.meta ================================================ fileFormatVersion: 2 guid: d51420807400b834f961c0b27b160632 timeCreated: 1486581752 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoCharucoBoard.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes a ChArUco board. /// public class ArucoCharucoBoard : ArucoBoard { // Editor fields [SerializeField] [Tooltip("Number of squares in the X direction.")] private int squaresNumberX; [SerializeField] [Tooltip("Number of squares in the Y direction.")] private int squaresNumberY; [SerializeField] [Tooltip("Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.")] private float squareSideLength; // Properties /// /// Gets or sets the number of squares in the X direction. /// public int SquaresNumberX { get { return squaresNumberX; } set { OnPropertyUpdating(); squaresNumberX = value; OnPropertyUpdated(); } } /// /// Gets or sets the number of squares in the Y direction. /// public int SquaresNumberY { get { return squaresNumberY; } set { OnPropertyUpdating(); squaresNumberY = value; OnPropertyUpdated(); } } /// /// Gets or sets the side length of each square. In pixels for Creators. In meters for Trackers and Calibrators. /// public float SquareSideLength { get { return squareSideLength; } set { OnPropertyUpdating(); squareSideLength = value; OnPropertyUpdated(); } } /// /// Gets or sets the list of the detected marker by the tracker the last frame. /// public Std.VectorPoint2f DetectedCorners { get; internal set; } /// /// Gets or sets the list of the ids of the detected marker by the tracker the last frame. /// public Std.VectorInt DetectedIds { get; internal set; } /// /// Gets or sets if the transform of the board has been correctly estimated by the tracker the last frame. /// public bool ValidTransform { get; internal set; } // ArucoObject methods public override Vector3 GetGameObjectScale() { ImageSize = new Vector2( x: SquaresNumberX * SquareSideLength + 2 * MarginsLength, y: SquaresNumberY * SquareSideLength + 2 * MarginsLength ); return new Vector3(ImageSize.x, SquareSideLength, ImageSize.y); } protected override void UpdateArucoHashCode() { ArucoHashCode = GetArucoHashCode(SquaresNumberX, SquaresNumberY, MarkerSideLength, SquareSideLength); } // ArucoBoard methods public override Cv.Mat Draw() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (SquaresNumberX <= 1 || SquaresNumberY <= 1 || SquareSideLength <= 0 || MarkerSideLength <= 0 || SquareSideLength <= MarkerSideLength || MarkerBorderBits <= 0 || Dictionary == null)) { return null; } #endif int squareSideLength = GetInPixels(SquareSideLength); int markerSideLength = GetInPixels(MarkerSideLength); Aruco.CharucoBoard board = Aruco.CharucoBoard.Create(SquaresNumberX, SquaresNumberY, squareSideLength, markerSideLength, Dictionary); Cv.Size imageSize = new Cv.Size(); imageSize.Width = GetInPixels(SquaresNumberX * squareSideLength + 2 * MarginsLength); imageSize.Height = GetInPixels(SquaresNumberY * squareSideLength + 2 * MarginsLength); Cv.Mat image; board.Draw(imageSize, out image, MarginsLength, (int)MarkerBorderBits); return image; } public override string GenerateName() { return "ArUcoUnity_ChArUcoBoard_" + Dictionary.Name + "_X_" + SquaresNumberX + "_Y_" + SquaresNumberY + "_SquareSize_" + SquareSideLength + "_MarkerSize_" + MarkerSideLength; } protected override void UpdateBoard() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (SquaresNumberX <= 1 || SquaresNumberY <= 1 || SquareSideLength <= 0 || MarkerSideLength <= 0 || SquareSideLength <= MarkerSideLength)) { return; } #endif AxisLength = 0.5f * (Mathf.Min(SquaresNumberX, SquaresNumberY) * SquareSideLength); Board = Aruco.CharucoBoard.Create(SquaresNumberX, SquaresNumberY, SquareSideLength, MarkerSideLength, Dictionary); } // Methods /// /// Computes the hash code of a ChAruco board. /// /// The number of squares in the X direction. /// The number of squares in the Y direction. /// The side length of each marker. /// The side length of each square. /// The calculated ArUco hash code. public static int GetArucoHashCode(int squaresNumberX, int squaresNumberY, float markerSideLength, float squareSideLength) { int hashCode = 17; hashCode = hashCode * 31 + typeof(ArucoCharucoBoard).GetHashCode(); hashCode = hashCode * 31 + squaresNumberX; hashCode = hashCode * 31 + squaresNumberY; hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // MarkerSideLength is not less than millimetres hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // SquareSideLength is not less than millimetres return hashCode; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoCharucoBoard.cs.meta ================================================ fileFormatVersion: 2 guid: 2bd3bf3f4a191c04bb36564300e2e048 timeCreated: 1486579168 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoDiamond.cs ================================================ using ArucoUnity.Plugin; using System; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes an ChArUco diamond marker. /// public class ArucoDiamond : ArucoObject { // Constants /// /// A ChArUco diamond marker is composed of 3x3 squares(3 per side). /// protected const int SquareNumberPerSide = 3; // Editor fields [SerializeField] [Tooltip("Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.")] private float squareSideLength; [SerializeField] [Tooltip("The id of the first marker of the diamond.")] private int marker1Id; [SerializeField] [Tooltip("The id of the second marker of the diamond.")] private int marker2Id; [SerializeField] [Tooltip("The id of the third marker of the diamond.")] private int marker3Id; [SerializeField] [Tooltip("The id of the fourth marker of the diamond.")] private int marker4Id; // Properties /// /// Gets or sets the side length of each square. In pixels for Creators. In meters for Trackers and Calibrators. /// public float SquareSideLength { get { return squareSideLength; } set { OnPropertyUpdating(); squareSideLength = value; OnPropertyUpdated(); } } /// /// Gets or sets the four ids of the four markers of the diamond. /// public int[] Ids { get { return ids; } set { if (value.Length != ids.Length) { Debug.LogError("Invalid number of Ids: ArucoDiamond requires " + ids.Length + " ids."); return; } OnPropertyUpdating(); ids = value; OnPropertyUpdated(); } } // Variables protected int[] ids; // MonoBehaviour methods protected override void OnValidate() { ids = new int[] { marker1Id, marker2Id, marker3Id, marker4Id }; base.OnValidate(); } // ArucoObject methods public override Cv.Mat Draw() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkerSideLength <= 0 || SquareSideLength <= 0 || SquareSideLength <= MarkerSideLength || Dictionary == null)) { return null; } #endif Cv.Vec4i ids = new Cv.Vec4i(); for (int i = 0; i < Ids.Length; ++i) { ids.Set(i, Ids[i]); } Cv.Mat image; Aruco.DrawCharucoDiamond(Dictionary, ids, GetInPixels(SquareSideLength), GetInPixels(MarkerSideLength), out image); return image; } public override string GenerateName() { return "ArUcoUnity_DiamondMarker_" + Dictionary.Name + "_Ids_" + Ids[0] + "_" + Ids[1] + "_" + Ids[2] + "_" + Ids[3] + "_SquareSize_" + SquareSideLength + "_MarkerSize_" + MarkerSideLength; } public override Vector3 GetGameObjectScale() { float sideLength = SquareNumberPerSide * SquareSideLength; return new Vector3(sideLength, SquareSideLength, sideLength); } protected override void UpdateArucoHashCode() { if (Ids != null) { ArucoHashCode = GetArucoHashCode(Ids); } } // Methods /// /// Computes the hash code of a ChArUco diamond marker. /// /// The list of ids of the four markers. /// The calculated ArUco hash code. public static int GetArucoHashCode(int[] ids) { int hashCode = 17; hashCode = hashCode * 31 + typeof(ArucoDiamond).GetHashCode(); foreach (var id in ids) { hashCode = hashCode * 31 + id; } return hashCode; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoDiamond.cs.meta ================================================ fileFormatVersion: 2 guid: ef80aa3a81113aa4280fbd60cc0008ae timeCreated: 1486579175 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoGridBoard.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes an ArUco grid board. /// public class ArucoGridBoard : ArucoBoard { // Editor fields [SerializeField] [Tooltip("Number of markers in the X direction.")] private int markersNumberX; [SerializeField] [Tooltip("Number of markers in the Y direction.")] private int markersNumberY; [SerializeField] [Tooltip("Separation length between two consecutive markers in the grid. In pixels for Creators. In meters for Trackers and Calibrators.")] private float markerSeparation; // Properties /// /// Gets or sets the number of markers in the X direction. /// public int MarkersNumberX { get { return markersNumberX; } set { OnPropertyUpdating(); markersNumberX = value; OnPropertyUpdated(); } } /// /// Gets or sets the number of markers in the Y direction. /// public int MarkersNumberY { get { return markersNumberY; } set { OnPropertyUpdating(); markersNumberY = value; OnPropertyUpdated(); } } /// /// Gets or sets the separation between two consecutive markers in the grid. In pixels for Creators. In meters for Trackers and Calibrators. /// public float MarkerSeparation { get { return markerSeparation; } set { OnPropertyUpdating(); markerSeparation = value; OnPropertyUpdated(); } } /// /// Gets or sets the number of markers employed by the tracker the last frame for the estimation of the transform of the board. /// public int MarkersUsedForEstimation { get; internal set; } // ArucoObject methods public override Vector3 GetGameObjectScale() { ImageSize = new Vector2( x: MarkersNumberX * (MarkerSideLength + MarkerSeparation) - MarkerSeparation + 2 * MarginsLength, y: MarkersNumberY * (MarkerSideLength + MarkerSeparation) - MarkerSeparation + 2 * MarginsLength ); return new Vector3(ImageSize.x, MarkerSideLength, ImageSize.y); } protected override void UpdateArucoHashCode() { ArucoHashCode = GetArucoHashCode(MarkersNumberX, MarkersNumberY, MarkerSideLength, MarkerSeparation); } // ArucoBoard methods public override Cv.Mat Draw() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkersNumberX <= 0 || MarkersNumberY <= 0 || MarkerSideLength <= 0 || MarkerSeparation <= 0 || MarkerBorderBits <= 0 || Dictionary == null)) { return null; } #endif int markerSideLength = GetInPixels(MarkerSideLength); int markerSeparation = GetInPixels(MarkerSeparation); Aruco.GridBoard board = Aruco.GridBoard.Create(MarkersNumberX, MarkersNumberY, markerSideLength, markerSeparation, Dictionary); Cv.Size imageSize = new Cv.Size(); imageSize.Width = GetInPixels(MarkersNumberX * (markerSideLength + markerSeparation) - markerSeparation + 2 * MarginsLength); imageSize.Height = GetInPixels(MarkersNumberY * (markerSideLength + markerSeparation) - markerSeparation + 2 * MarginsLength); Cv.Mat image; board.Draw(imageSize, out image, MarginsLength, (int)MarkerBorderBits); return image; } public override string GenerateName() { return "ArUcoUnity_GridBoard_" + Dictionary.Name + "_X_" + MarkersNumberX + "_Y_" + MarkersNumberY + "_MarkerSize_" + MarkerSideLength; } protected override void UpdateBoard() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkersNumberX <= 0 || MarkersNumberY <= 0 || MarkerSideLength <= 0 || MarkerSeparation <= 0)) { return; } #endif AxisLength = 0.5f * (Mathf.Min(MarkersNumberX, MarkersNumberY) * (MarkerSideLength + MarkerSeparation) + MarkerSeparation); Board = Aruco.GridBoard.Create(MarkersNumberX, MarkersNumberY, MarkerSideLength, MarkerSeparation, Dictionary); } // Methods /// /// Computes the hash code of a grid board. /// /// The number of markers in the X direction. /// The number of markers in the Y direction. /// The side length of each marker. /// The separation between two consecutive markers in the grid. /// The calculated ArUco hash code. public static int GetArucoHashCode(int markersNumberX, int markersNumberY, float markerSideLength, float markerSeparation) { int hashCode = 17; hashCode = hashCode * 31 + typeof(ArucoGridBoard).GetHashCode(); hashCode = hashCode * 31 + markersNumberX; hashCode = hashCode * 31 + markersNumberY; hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // MarkerSideLength is not less than millimeters hashCode = hashCode * 31 + Mathf.RoundToInt(markerSeparation * 1000); // MarkerSeparation is not less than millimeters return hashCode; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoGridBoard.cs.meta ================================================ fileFormatVersion: 2 guid: a66515f6201048442966d413775d221e timeCreated: 1486579159 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoMarker.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes an ArUco marker. /// public class ArucoMarker : ArucoObject { // Editor fields [SerializeField] [Tooltip("The marker id in the used dictionary.")] private int markerId; // Properties /// /// Gets or sets the marker id in the used dictionary. /// public int MarkerId { get { return markerId; } set { OnPropertyUpdating(); markerId = value; OnPropertyUpdated(); } } // ArucoObject methods public override Cv.Mat Draw() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkerSideLength <= 0 || MarkerBorderBits == 0 || Dictionary == null)) { return null; } #endif Cv.Mat image; Dictionary.DrawMarker(MarkerId, GetInPixels(MarkerSideLength), out image, (int)MarkerBorderBits); return image; } public override string GenerateName() { return "ArUcoUnity_Marker_" + Dictionary.Name + "_Id_" + MarkerId; } public override Vector3 GetGameObjectScale() { return MarkerSideLength * Vector3.one; } protected override void UpdateArucoHashCode() { ArucoHashCode = GetArucoHashCode(MarkerId); } // Methods /// /// Computes the hash code of a marker based on its id. /// /// The marker id. /// The calculated ArUco hash code. public static int GetArucoHashCode(int markerId) { int hashCode = 17; hashCode = hashCode * 31 + typeof(ArucoMarker).GetHashCode(); hashCode = hashCode * 31 + markerId; return hashCode; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoMarker.cs.meta ================================================ fileFormatVersion: 2 guid: e7dccfd012452104795fa7ee55cee65a timeCreated: 1484782075 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoObject.cs ================================================ using ArucoUnity.Plugin; using System; using UnityEngine; namespace ArucoUnity.Objects { /// /// Describes the shared properties of all the ArUco objects. Trackers, Creators and Calibrators use this interface. /// [ExecuteInEditMode] public abstract class ArucoObject : MonoBehaviour { // Constants protected const float metersToPixels300ppp = 100f * 300f / 2.54f; // Editor fields [SerializeField] [Tooltip("The dictionary to use.")] private Aruco.PredefinedDictionaryName dictionaryName; [SerializeField] [Tooltip("The side length of each marker. In pixels for Creators. In meters for Trackers and Calibrators.")] private float markerSideLength; [SerializeField] [Tooltip("Number of bits in marker borders (default: 1). Used by Creators.")] private uint markerBorderBits; private bool displayInEditor = true; // Events /// /// Executed before a property is going to be updated. /// public event Action PropertyUpdating = delegate { }; /// /// Executed after a property has been updated. /// public event Action PropertyUpdated = delegate { }; // Properties public int ArucoHashCode { get; protected set; } /// /// Gets or sets the dictionary to use. /// public Aruco.Dictionary Dictionary { get { return dictionary; } set { OnPropertyUpdating(); dictionary = value; OnPropertyUpdated(); } } /// /// Gets or sets the side length of each marker. In pixels for Creators. In meters for Trackers and Calibrators. /// public float MarkerSideLength { get { return markerSideLength; } set { OnPropertyUpdating(); markerSideLength = value; OnPropertyUpdated(); } } /// /// Gets or sets the number of bits in marker borders (default: 1). Used by Creators. /// public uint MarkerBorderBits { get { return markerBorderBits; } set { OnPropertyUpdating(); markerBorderBits = value; OnPropertyUpdated(); } } public bool DisplayInEditor { get { return displayInEditor; } set { displayInEditor = value; } } // Variables private Aruco.Dictionary dictionary; // MonoBehaviour methods /// /// Calls . /// protected virtual void Awake() { if (Dictionary == null) { dictionary = Aruco.GetPredefinedDictionary(dictionaryName); } UpdateProperties(); } /// /// Calls in editor mode. /// protected virtual void OnValidate() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { if (Dictionary == null || dictionaryName != Dictionary.Name) { dictionary = Aruco.GetPredefinedDictionary(dictionaryName); } OnPropertyUpdated(); } #endif } // Methods /// /// Returns the image of the ArUco object. In editor it should returns null and no exception if the object is incorrectly configured. /// /// The image of the ArUco object. public abstract Cv.Mat Draw(); /// /// Returns a generated name depending on the value of the properties. /// public abstract string GenerateName(); /// /// Gets the scale to length. /// public abstract Vector3 GetGameObjectScale(); /// /// Updates the ArUco hash code of the object. /// protected abstract void UpdateArucoHashCode(); /// /// Calls the event . /// protected void OnPropertyUpdating() { PropertyUpdating.Invoke(this); } /// /// Calls and the event. /// protected void OnPropertyUpdated() { UpdateProperties(); PropertyUpdated.Invoke(this); } /// /// Initializes the properties and calls the method. /// protected virtual void UpdateProperties() { UpdateArucoHashCode(); } /// /// Returns a value as an int, with a conversion from meters to pixels if the property value is less than 10. /// protected int GetInPixels(float propertyValue) { int propertyValueInt = (int)propertyValue; if (propertyValue > 0 && propertyValue < 10) { propertyValueInt = Mathf.RoundToInt(propertyValue * metersToPixels300ppp); } return propertyValueInt; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/ArucoObject.cs.meta ================================================ fileFormatVersion: 2 guid: bcaf8f91f3d0d3f4aaeb1688768f87d2 timeCreated: 1485371309 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectCreator.cs ================================================ using UnityEngine; using System.IO; namespace ArucoUnity.Objects.Displayers { /// /// Create and display images of an ArUco object ready to be printed. /// /// See the OpenCV documentation for more information about the marker creation (second section of the following tutorial): /// http://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html /// public class ArucoObjectCreator : ArucoObjectDisplayer { // Constants public const float pixelsToMetersFactor = 0.001f; // Editor fields [SerializeField] [Tooltip("Save the image in play mode.")] private bool autoSaveInPlayMode = true; [SerializeField] [Tooltip("The output folder for the image, relative to the Application.persistentDataPath folder.")] private string outputFolder = "ArucoUnity/Images/"; [SerializeField] [Tooltip("Set automatically the image filename based on the Aruco object's property values.")] private bool automaticFilename = true; [SerializeField] [Tooltip("The name of the image, without the extension (.png added automatically).")] private string imageFilename; // Properties /// /// Gets or sets if the is automatically saved in play mode. /// public bool AutoSaveImage { get { return autoSaveInPlayMode; } set { autoSaveInPlayMode = value; } } /// /// Gets or sets the output folder for the image, relative to the Application.persistentDataPath folder /// (default: ArucoUnity/Images/). /// public string OutputFolder { get { return outputFolder; } set { outputFolder = value; } } /// /// Gets or sets the name of the image, without the extension (.png added automatically). If null, it will be /// generated automatically. /// public string ImageFilename { get { return imageFilename; } set { imageFilename = value; } } // ArucoObjectDisplayer methods /// /// Calls then if /// is set. Also set in the editor. /// protected override void UpdateImage() { base.UpdateImage(); #if UNITY_EDITOR if (automaticFilename) { ImageFilename = ArucoObject.GenerateName(); } #endif #if UNITY_EDITOR if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { #endif if (AutoSaveImage) { SaveImage(); } #if UNITY_EDITOR } #endif } protected override void PlaceImagePlane() { base.PlaceImagePlane(); if (ImagePlane != null && ArucoObject != null) { var scale = ArucoObject.GetGameObjectScale(); ImagePlane.transform.localScale = pixelsToMetersFactor * new Vector3(scale.x, scale.z, scale.y); } } // Methods /// /// Save the on a image file in the with /// as filename. /// public virtual void SaveImage() { if (automaticFilename || ImageFilename == null || ImageFilename.Length == 0) { ImageFilename = ArucoObject.GenerateName() + ".png"; } string outputFolderPath = Path.Combine((Application.isEditor) ? Application.dataPath : Application.persistentDataPath, OutputFolder); if (!Directory.Exists(outputFolderPath)) { Directory.CreateDirectory(outputFolderPath); } string imageFilePath = outputFolderPath + ImageFilename; File.WriteAllBytes(imageFilePath, ImageTexture.EncodeToPNG()); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectCreator.cs.meta ================================================ fileFormatVersion: 2 guid: 67b4f93e96aa56b4f8b21751c9e7bc16 timeCreated: 1484691079 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectDisplayer.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects.Displayers { [ExecuteInEditMode] public class ArucoObjectDisplayer : MonoBehaviour { // Editor fields [SerializeField] [Tooltip("The ArUco object to display.")] private ArucoObject arucoObject; [SerializeField] [Tooltip("Display the image in play mode.")] private bool displayInPlayMode = false; // Properties /// /// Get or sets the ArUco object to display. /// protected ArucoObject ArucoObject { get { return arucoObject; } set { SetArucoObject(value); } } /// /// Gets or sets if is displayed in play mode. /// protected bool DisplayInPlayMode { get { return displayInPlayMode; } set { displayInPlayMode = value; } } /// /// Gets or sets the prefab of . If null, default will be loaded: /// `Prefabs/Resources/ArucoCreatorImagePlane.prefab`. /// public GameObject ImagePlanePrefab { get; set; } /// /// Gets the plane that display . /// public GameObject ImagePlane { get; protected set; } /// /// Gets the image of the to display. /// public Cv.Mat Image { get; protected set; } /// /// Gets the texture that contains . /// public Texture2D ImageTexture { get; protected set; } // Variables #if UNITY_EDITOR protected ArucoObject lastArucoObjectOnValidate = null; #endif protected Material imagePlaneMaterial; // MonoBehaviour methods /// /// Calls to display the only in play mode. /// protected virtual void Start() { #if UNITY_EDITOR if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { #endif if (DisplayInPlayMode && ArucoObject) { var currentArucoObject = ArucoObject; arucoObject = null; SetArucoObject(currentArucoObject); UpdateImage(); } else { enabled = false; } #if UNITY_EDITOR } #endif } /// /// Updates the display in the editor if has been changed. /// protected virtual void Update() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { if (lastArucoObjectOnValidate != ArucoObject) { if (ArucoObject != null) { var currentArucoObject = ArucoObject; arucoObject = lastArucoObjectOnValidate; SetArucoObject(currentArucoObject); } else { ResetImage(); } lastArucoObjectOnValidate = ArucoObject; } // The Aruco Object may initialize after the displayer, so we can display the image the frame after if (ArucoObject != null && Image == null) { UpdateImage(); } // Keep the image plane at the same position if (ImagePlane != null) { PlaceImagePlane(); } } #endif } /// /// Unsubscribes from the event. /// protected virtual void OnDestroy() { if (ArucoObject != null) { ArucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated; } } /// /// Calls in the editor. /// private void OnDisable() { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { ResetImage(); } #endif } // Methods /// /// Creates and from . /// public virtual void CreateImage() { Image = ArucoObject.Draw(); if (Image != null) { // Vertical flip to correctly display the image on the texture int verticalFlipCode = 0; Cv.Mat imageForTexture = Image.Clone(); Cv.Flip(imageForTexture, imageForTexture, verticalFlipCode); // Load the image to the texture int markerDataSize = (int)(Image.ElemSize() * Image.Total()); ImageTexture = new Texture2D(Image.Cols, Image.Rows, TextureFormat.RGB24, false); ImageTexture.LoadRawTextureData(imageForTexture.DataIntPtr, markerDataSize); ImageTexture.Apply(); } } /// /// Updates with . /// public virtual void DisplayImage() { InitializeImagePlane(); PlaceImagePlane(); imagePlaneMaterial.mainTexture = ImageTexture; ImagePlane.SetActive(true); } /// /// Resets , and . /// public virtual void ResetImage() { Image = null; ImageTexture = null; if (imagePlaneMaterial != null) { imagePlaneMaterial.mainTexture = null; } if (ImagePlane != null) { ImagePlane.SetActive(false); } } /// /// Calls then if has been created or /// . /// protected virtual void UpdateImage() { CreateImage(); if (Image != null) { DisplayImage(); } else { ResetImage(); } } /// /// Subscribes to the event, and unsubscribes from the previous ArucoObject. /// protected virtual void SetArucoObject(ArucoObject arucoObject) { if (ArucoObject != null) { ArucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated; } this.arucoObject = arucoObject; if (ArucoObject != null) { ArucoObject.PropertyUpdated += ArucoObject_PropertyUpdated; } } /// /// Initializes . /// protected virtual void InitializeImagePlane() { // Loads the prefab if (ImagePlanePrefab == null) { ImagePlanePrefab = Resources.Load("ArucoObjectDisplayerImagePlane") as GameObject; } // Creates the image plane if null if (ImagePlane == null) { // Finds or creates the image plane gameObject var imagePlaneTransform = transform.Find(ImagePlanePrefab.name); if (imagePlaneTransform != null) { ImagePlane = imagePlaneTransform.gameObject; } else { ImagePlane = Instantiate(ImagePlanePrefab, transform); ImagePlane.name = ImagePlanePrefab.name; } // Updates the image plane material #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) #else if (Application.isEditor) #endif { var renderer = ImagePlane.GetComponent(); imagePlaneMaterial = new Material(renderer.sharedMaterial); renderer.sharedMaterial = imagePlaneMaterial; } else { imagePlaneMaterial = ImagePlane.GetComponent().material; } // Don't save in the scene : dynamically generated ImagePlane.hideFlags = HideFlags.DontSaveInEditor; } } /// /// Places, rotates and scales the image plane. /// protected virtual void PlaceImagePlane() { if (ArucoObject != null) { var scale = ArucoObject.GetGameObjectScale(); ImagePlane.transform.SetParent(null); ImagePlane.transform.localScale = new Vector3(scale.x, scale.z, scale.y); // Because it's rotated up ImagePlane.transform.SetParent(transform); } ImagePlane.transform.localPosition = Vector3.zero; ImagePlane.transform.forward = -transform.up; // Rotated up } /// /// Calls . /// protected virtual void ArucoObject_PropertyUpdated(ArucoObject arucoObject) { UpdateImage(); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectDisplayer.cs.meta ================================================ fileFormatVersion: 2 guid: 3b8644fbc5335334e944b09d5c8da57a timeCreated: 1509997582 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Displayers.meta ================================================ fileFormatVersion: 2 guid: 658af5c773380ec4a9acc6630a5c00c5 folderAsset: yes timeCreated: 1510715503 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoCharucoBoardTracker.cs ================================================ using ArucoUnity.Plugin; namespace ArucoUnity.Objects.Trackers { public class ArucoCharucoBoardTracker : ArucoObjectTracker { // ArucoObjectTracker methods public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Detect(cameraId, dictionary, image); ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker; foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects(dictionary)) { if (arucoTracker.RefineDetectedMarkers) { Aruco.RefineDetectedMarkers(image, arucoCharucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]); markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size(); } Std.VectorPoint2f charucoCorners = null; Std.VectorInt charucoIds = null; if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0) { if (arucoCameraUndistortion == null) { Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], arucoCamera.Images[cameraId], (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds); } else { Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], arucoCamera.Images[cameraId], (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId]); } } arucoCharucoBoard.DetectedCorners = charucoCorners; arucoCharucoBoard.DetectedIds = charucoIds; } } public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Draw(cameraId, dictionary, image); foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects(dictionary)) { if (arucoCharucoBoard.DetectedIds != null && arucoCharucoBoard.DetectedIds.Size() > 0) { if (arucoTracker.DrawDetectedCharucoMarkers) { Aruco.DrawDetectedCornersCharuco(image, arucoCharucoBoard.DetectedCorners, arucoCharucoBoard.DetectedIds); } if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && arucoCharucoBoard.Rvec != null) { Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], arucoCharucoBoard.Rvec, arucoCharucoBoard.Tvec, arucoCharucoBoard.AxisLength); } } } } public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.EstimateTransforms(cameraId, dictionary); foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects(dictionary)) { Cv.Vec3d rvec = null, tvec = null; bool validTransform = false; if (arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null) { validTransform = Aruco.EstimatePoseCharucoBoard(arucoCharucoBoard.DetectedCorners, arucoCharucoBoard.DetectedIds, (Aruco.CharucoBoard)arucoCharucoBoard.Board, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvec, out tvec); } arucoCharucoBoard.Rvec = rvec; arucoCharucoBoard.Tvec = tvec; arucoCharucoBoard.ValidTransform = validTransform; } } public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.UpdateTransforms(cameraId, dictionary); foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects(dictionary)) { if (arucoCharucoBoard.Rvec != null) { arucoCameraDisplay.PlaceArucoObject(arucoCharucoBoard.transform, cameraId, arucoCharucoBoard.Tvec.ToPosition(), arucoCharucoBoard.Rvec.ToRotation()); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoCharucoBoardTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 5f945c6d884a00441af109be9eaff9a3 timeCreated: 1487619589 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoDiamondTracker.cs ================================================ using ArucoUnity.Plugin; using System.Collections.Generic; namespace ArucoUnity.Objects.Trackers { public class ArucoDiamondTracker : ArucoObjectTracker { // Constants protected const float DetectSquareMarkerLengthRate = 2f; protected const float EstimatePoseSquareLength = 1f; protected const float DrawAxisLength = EstimatePoseSquareLength / 2f; // Properties public Dictionary[] DiamondCorners { get; set; } public Dictionary[] DiamondIds { get; set; } public Dictionary[] DetectedDiamonds { get; set; } public Dictionary[] DiamondRvecs { get; set; } public Dictionary[] DiamondTvecs { get; set; } // ArucoObjectsController related methods protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i()); DetectedDiamonds[cameraId].Add(dictionary, 0); DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); } } protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { DiamondIds[cameraId].Remove(dictionary); DetectedDiamonds[cameraId].Remove(dictionary); DiamondRvecs[cameraId].Remove(dictionary); DiamondTvecs[cameraId].Remove(dictionary); } } // ArucoObjectTracker methods public override void Activate(IArucoObjectsTracker arucoTracker) { base.Activate(arucoTracker); DiamondCorners = new Dictionary[arucoCamera.CameraNumber]; DiamondIds = new Dictionary[arucoCamera.CameraNumber]; DetectedDiamonds = new Dictionary[arucoCamera.CameraNumber]; DiamondRvecs = new Dictionary[arucoCamera.CameraNumber]; DiamondTvecs = new Dictionary[arucoCamera.CameraNumber]; for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { DiamondCorners[cameraId] = new Dictionary(); DiamondIds[cameraId] = new Dictionary(); DetectedDiamonds[cameraId] = new Dictionary(); DiamondRvecs[cameraId] = new Dictionary(); DiamondTvecs[cameraId] = new Dictionary(); foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects) { Aruco.Dictionary dictionary = arucoObjectDictionary.Key; DiamondCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f()); DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i()); DetectedDiamonds[cameraId].Add(dictionary, 0); DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); } } } public override void Deactivate() { base.Deactivate(); DiamondCorners = null; DiamondIds = null; DetectedDiamonds = null; DiamondRvecs = null; DiamondTvecs = null; } public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Detect(cameraId, dictionary, image); ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker; Std.VectorVectorPoint2f diamondCorners = null; Std.VectorVec4i diamondIds = null; if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0) { if (arucoCameraUndistortion == null) { Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds); } else { Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId]); } } DiamondCorners[cameraId][dictionary] = diamondCorners; DiamondIds[cameraId][dictionary] = diamondIds; DetectedDiamonds[cameraId][dictionary] = (diamondIds != null) ? (int)diamondIds.Size() : 0; } public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Draw(cameraId, dictionary, image); if (DetectedDiamonds[cameraId][dictionary] > 0) { // Draw detected diamonds if (arucoTracker.DrawDetectedDiamonds) { Aruco.DrawDetectedDiamonds(image, DiamondCorners[cameraId][dictionary], DiamondIds[cameraId][dictionary]); } // Draw axes of detected diamonds if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && DiamondRvecs[cameraId][dictionary] != null) { for (uint i = 0; i < DetectedDiamonds[cameraId][dictionary]; i++) { Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], DiamondRvecs[cameraId][dictionary].At(i), DiamondTvecs[cameraId][dictionary].At(i), DrawAxisLength); } } } } public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.EstimateTransforms(cameraId, dictionary); Std.VectorVec3d diamondRvecs = null, diamondTvecs = null; if (DetectedDiamonds[cameraId][dictionary] > 0 && arucoCameraUndistortion != null) { Aruco.EstimatePoseSingleMarkers(DiamondCorners[cameraId][dictionary], EstimatePoseSquareLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out diamondRvecs, out diamondTvecs); } DiamondRvecs[cameraId][dictionary] = diamondRvecs; DiamondTvecs[cameraId][dictionary] = diamondTvecs; } public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.UpdateTransforms(cameraId, dictionary); if (DiamondRvecs[cameraId][dictionary] != null) { for (uint i = 0; i < DetectedDiamonds[cameraId][dictionary]; i++) { ArucoDiamond foundArucoDiamond; if (TryGetArucoDiamond(cameraId, dictionary, i, out foundArucoDiamond)) { float positionFactor = foundArucoDiamond.SquareSideLength * EstimatePoseSquareLength / DetectSquareMarkerLengthRate; // Equal to marker length arucoCameraDisplay.PlaceArucoObject(foundArucoDiamond.transform, cameraId, arucoTracker.MarkerTracker.MarkerTvecs[cameraId][dictionary].At(i).ToPosition() * positionFactor, arucoTracker.MarkerTracker.MarkerRvecs[cameraId][dictionary].At(i).ToRotation()); } } } } protected virtual bool TryGetArucoDiamond(int cameraId, Aruco.Dictionary dictionary, uint arucoObjectId, out ArucoDiamond arucoDiamond) { int[] detectedDiamondIds = new int[4]; for (int j = 0; j < 4; j++) { detectedDiamondIds[j] = DiamondIds[cameraId][dictionary].At(arucoObjectId).Get(j); } ArucoObject foundArucoObject; int detectedDiamondHashCode = ArucoDiamond.GetArucoHashCode(detectedDiamondIds); if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedDiamondHashCode, out foundArucoObject)) { arucoDiamond = foundArucoObject as ArucoDiamond; if (arucoDiamond != null) { return true; } } arucoDiamond = null; return false; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoDiamondTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 9dc64ceca377f264ba826f1de3af6752 timeCreated: 1487619150 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoGridBoardTracker.cs ================================================ using ArucoUnity.Plugin; namespace ArucoUnity.Objects.Trackers { public class ArucoGridBoardTracker : ArucoObjectTracker { // ArucoObjectTracker methods public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Detect(cameraId, dictionary, image); ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker; if (arucoTracker.RefineDetectedMarkers && arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0) { foreach (var arucoBoard in arucoTracker.GetArucoObjects(dictionary)) { Aruco.RefineDetectedMarkers(image, arucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]); markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size(); } } } public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Draw(cameraId, dictionary, image); foreach (var arucoGridBoard in arucoTracker.GetArucoObjects(dictionary)) { if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && arucoGridBoard.Rvec != null) { Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], arucoGridBoard.Rvec, arucoGridBoard.Tvec, arucoGridBoard.AxisLength); } } } public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.EstimateTransforms(cameraId, dictionary); foreach (var arucoGridBoard in arucoTracker.GetArucoObjects(dictionary)) { Cv.Vec3d rvec = null, tvec = null; int markersUsedForEstimation = 0; if (arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null) { markersUsedForEstimation = Aruco.EstimatePoseBoard(arucoTracker.MarkerTracker.MarkerCorners[cameraId][dictionary], arucoTracker.MarkerTracker.MarkerIds[cameraId][dictionary], arucoGridBoard.Board, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvec, out tvec); } arucoGridBoard.Rvec = rvec; arucoGridBoard.Tvec = tvec; arucoGridBoard.MarkersUsedForEstimation = markersUsedForEstimation; } } public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.UpdateTransforms(cameraId, dictionary); // Update transform of each tracked board foreach (var arucoGridBoard in arucoTracker.GetArucoObjects(dictionary)) { if (arucoGridBoard.Rvec != null) { // Adjust the estimated coordinates var position = arucoGridBoard.Tvec.ToPosition() + arucoGridBoard.transform.right * arucoGridBoard.GetGameObjectScale().x / 2 + arucoGridBoard.transform.forward * arucoGridBoard.GetGameObjectScale().z / 2; arucoCameraDisplay.PlaceArucoObject(arucoGridBoard.transform, cameraId, position, arucoGridBoard.Rvec.ToRotation()); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoGridBoardTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 444e053177bf32444b0863b16780a8f7 timeCreated: 1487619379 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoMarkerTracker.cs ================================================ using ArucoUnity.Plugin; using System.Collections.Generic; using UnityEngine; namespace ArucoUnity.Objects.Trackers { public class ArucoMarkerTracker : ArucoObjectTracker { // Constants protected const float estimatePoseMarkerLength = 1f; protected readonly Color rejectedMarkerCandidatesColor = new Color(100, 0, 255); // Properties public Dictionary[] DetectedMarkers { get; protected internal set; } /// /// Vector of the detected marker corners on each . Updated by . /// public Dictionary[] MarkerCorners { get; protected internal set; } /// /// Vector of identifiers of the detected markers on each . Updated by . /// public Dictionary[] MarkerIds { get; protected internal set; } /// /// Vector of the corners with not a correct identification on each . Updated by . /// public Dictionary[] RejectedCandidateCorners { get; protected internal set; } /// /// Vector of rotation vectors of the detected markers on each . /// public Dictionary[] MarkerRvecs { get; protected internal set; } /// /// Vector of translation vectors of the detected markers on each . /// public Dictionary[] MarkerTvecs { get; protected internal set; } // ArucoObjectsController related methods protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f()); MarkerIds[cameraId].Add(dictionary, new Std.VectorInt()); RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f()); MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); DetectedMarkers[cameraId].Add(dictionary, 0); } } protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { MarkerCorners[cameraId].Remove(dictionary); MarkerIds[cameraId].Remove(dictionary); RejectedCandidateCorners[cameraId].Remove(dictionary); MarkerRvecs[cameraId].Remove(dictionary); MarkerTvecs[cameraId].Remove(dictionary); DetectedMarkers[cameraId].Remove(dictionary); } } // ArucoObjectTracker methods public override void Activate(IArucoObjectsTracker arucoTracker) { base.Activate(arucoTracker); // Initialize the properties and the ArUco objects MarkerCorners = new Dictionary[arucoCamera.CameraNumber]; MarkerIds = new Dictionary[arucoCamera.CameraNumber]; RejectedCandidateCorners = new Dictionary[arucoCamera.CameraNumber]; MarkerRvecs = new Dictionary[arucoCamera.CameraNumber]; MarkerTvecs = new Dictionary[arucoCamera.CameraNumber]; DetectedMarkers = new Dictionary[arucoCamera.CameraNumber]; for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { MarkerCorners[cameraId] = new Dictionary(); MarkerIds[cameraId] = new Dictionary(); RejectedCandidateCorners[cameraId] = new Dictionary(); MarkerRvecs[cameraId] = new Dictionary(); MarkerTvecs[cameraId] = new Dictionary(); DetectedMarkers[cameraId] = new Dictionary(); foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects) { Aruco.Dictionary dictionary = arucoObjectDictionary.Key; MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f()); MarkerIds[cameraId].Add(dictionary, new Std.VectorInt()); RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f()); MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d()); DetectedMarkers[cameraId].Add(dictionary, 0); } } } public override void Deactivate() { base.Deactivate(); MarkerCorners = null; MarkerIds = null; RejectedCandidateCorners = null; MarkerRvecs = null; MarkerTvecs = null; DetectedMarkers = null; } public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Detect(cameraId, dictionary, image); Std.VectorVectorPoint2f markerCorners, rejectedCandidateCorners; Std.VectorInt markerIds; Aruco.DetectMarkers(image, dictionary, out markerCorners, out markerIds, arucoTracker.DetectorParameters, out rejectedCandidateCorners); DetectedMarkers[cameraId][dictionary] = (int)markerIds.Size(); MarkerCorners[cameraId][dictionary] = markerCorners; MarkerIds[cameraId][dictionary] = markerIds; RejectedCandidateCorners[cameraId][dictionary] = rejectedCandidateCorners; } public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { base.Draw(cameraId, dictionary, image); if (DetectedMarkers[cameraId][dictionary] > 0) { // Draw all the detected markers if (arucoTracker.DrawDetectedMarkers) { Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]); } // Draw axes of detected tracked markers if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && MarkerRvecs[cameraId][dictionary] != null) { for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++) { ArucoObject foundArucoObject; int detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i)); if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject)) { Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), estimatePoseMarkerLength); } } } } // Draw the rejected marker candidates if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0) { Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]); } } public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.EstimateTransforms(cameraId, dictionary); Std.VectorVec3d rvecs = null, tvecs = null; if (DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null) { Aruco.EstimatePoseSingleMarkers(MarkerCorners[cameraId][dictionary], estimatePoseMarkerLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvecs, out tvecs); } MarkerRvecs[cameraId][dictionary] = rvecs; MarkerTvecs[cameraId][dictionary] = tvecs; } public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary) { base.UpdateTransforms(cameraId, dictionary); if (MarkerRvecs[cameraId][dictionary] != null) { for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++) { ArucoObject foundArucoObject; int detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i)); if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject)) { var localPosition = MarkerTvecs[cameraId][dictionary].At(i).ToPosition() * foundArucoObject.MarkerSideLength / estimatePoseMarkerLength; arucoCameraDisplay.PlaceArucoObject(foundArucoObject.transform, cameraId, localPosition, MarkerRvecs[cameraId][dictionary].At(i).ToRotation()); } } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoMarkerTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 014974a785f11b944bf780a4a3a84995 timeCreated: 1487619347 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectDetector.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Plugin; using System; using UnityEngine; namespace ArucoUnity.Objects.Trackers { /// /// Detects ArUco objects for a camera system according to . /// public abstract class ArucoObjectDetector : ArucoCameraController, IHasDetectorParameter { // Editor fields [SerializeField] [Tooltip("The parameters to use for the marker detection.")] private DetectorParametersController detectorParametersController; // Properties /// /// Gets or sets the parameters to use for the detection. /// public Aruco.DetectorParameters DetectorParameters { get; set; } // ConfigurableController methods /// /// Checks if is set. /// protected override void Configuring() { base.Configuring(); DetectorParameters = detectorParametersController.DetectorParameters; if (DetectorParameters == null) { throw new ArgumentNullException("DetectorParameters", "This property needs to be set for the configuration."); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectDetector.cs.meta ================================================ fileFormatVersion: 2 guid: 3530d31a8349e4c48b59002deb2dcde8 timeCreated: 1484072734 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectTracker.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Cameras.Displays; using ArucoUnity.Cameras.Undistortions; using ArucoUnity.Plugin; using System; namespace ArucoUnity.Objects.Trackers { /// /// Base for detecting and estimating the transform of an ArUco object. /// public abstract class ArucoObjectTracker { // Properties /// /// Is the tracker configured and activated? /// public bool IsActivated { get; protected set; } // Variables protected IArucoObjectsTracker arucoTracker; protected IArucoCamera arucoCamera; protected IArucoCameraUndistortion arucoCameraUndistortion; protected IArucoCameraDisplay arucoCameraDisplay; // ArucoObjectsController related methods /// /// Update the properties when a new dictionary is added. /// /// The new dictionary. protected virtual void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary) { } /// /// Update the properties when a dictionary is removed. /// /// The removed dictionary. protected virtual void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary) { } // Methods /// /// Configure and activate the tracker. /// public virtual void Activate(IArucoObjectsTracker arucoTracker) { this.arucoTracker = arucoTracker; arucoCamera = arucoTracker.ArucoCamera; arucoCameraUndistortion = arucoTracker.ArucoCameraDisplay.ArucoCameraUndistortion; arucoCameraDisplay = arucoTracker.ArucoCameraDisplay; IsActivated = true; arucoTracker.DictionaryAdded += ArucoObjectsController_DictionaryAdded; arucoTracker.DictionaryRemoved += ArucoObjectsController_DictionaryRemoved; } /// /// Deactivate the tracker. /// public virtual void Deactivate() { arucoTracker.DictionaryAdded -= ArucoObjectsController_DictionaryAdded; arucoTracker.DictionaryRemoved -= ArucoObjectsController_DictionaryRemoved; IsActivated = false; } /// /// Detect the ArUco objects on the current image of a camera. /// /// The id of the camera to use. /// The dictionary to use for the detection. public virtual void Detect(int cameraId, Aruco.Dictionary dictionary) { Detect(cameraId, dictionary, arucoCamera.Images[cameraId]); } /// /// Detect the ArUco objects for a camera on an custom image. /// /// The id of the camera. /// The dictionary to use for the detection. /// The image to use for the detection. public virtual void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { if (!IsActivated) { throw new Exception("Activate the tracker before detecting ArUco objects."); } } /// /// Draw the detected ArUco objects on the current image of a camera. /// /// The id of the camera to use. /// The dictionary to use. public virtual void Draw(int cameraId, Aruco.Dictionary dictionary) { Draw(cameraId, dictionary, arucoCamera.Images[cameraId]); } /// /// Draw the detected ArUco objects for a camera on a custom image. /// /// The id of the camera to use. /// The dictionary to use. /// Draw on this image. public virtual void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image) { if (!IsActivated) { throw new Exception("Activate the tracker before drawing ArUco objects."); } } /// /// Estimate the gameObject's transform of each detected ArUco object. /// /// The id of the camera to use. /// The dictionary to use. public virtual void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary) { if (!IsActivated) { throw new Exception("Activate the tracker before estimating transforms of ArUco objects."); } } /// /// Place and orient the detected ArUco objects relative to a camera. /// /// The id of the camera to use. /// The dictionary to use. public virtual void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary) { if (!IsActivated) { throw new Exception("Activate the tracker before updating transforms of ArUco objects."); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectTracker.cs.meta ================================================ fileFormatVersion: 2 guid: c1ab9da512bec8f4291e399fb49439d8 timeCreated: 1487614490 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsController.cs ================================================ using UnityEngine; using System.Collections.Generic; using ArucoUnity.Plugin; using System; namespace ArucoUnity.Objects.Trackers { /// /// Manages a list of to detect for a camera system. /// public abstract class ArucoObjectsController : ArucoObjectDetector, IArucoObjectsController { // Editor fields [SerializeField] [Tooltip("The list of the ArUco objects to detect.")] private ArucoObject[] arucoObjects; // IArucoObjectsController events public event Action ArucoObjectAdded = delegate { }; public event Action ArucoObjectRemoved = delegate { }; public event Action DictionaryAdded = delegate { }; public event Action DictionaryRemoved = delegate { }; // IArucoObjectsController Properties public Dictionary> ArucoObjects { get; protected set; } // MonoBehaviour methods /// /// Initializes the properties. /// protected override void Awake() { base.Awake(); ArucoObjects = new Dictionary>(); } /// /// Adds to the list the ArUco objects added from the editor field array . /// protected override void Start() { foreach (ArucoObject arucoObject in arucoObjects) { AddArucoObject(arucoObject); } base.Start(); } // IArucoObjectsController Methods public virtual void AddArucoObject(ArucoObject arucoObject) { // Make sure the object is started and initialized arucoObject.gameObject.SetActive(true); // Try to find a list with the same dictionary than the new ArUco object Dictionary arucoObjectsCollection = null; foreach (var arucoObjectDictionary in ArucoObjects) { if (arucoObjectDictionary.Key.Name == arucoObject.Dictionary.Name || arucoObjectDictionary.Key == arucoObject.Dictionary) { arucoObjectsCollection = arucoObjectDictionary.Value; break; } } // If not found, create the new list attached to this dictionary if (arucoObjectsCollection == null) { arucoObjectsCollection = new Dictionary(); ArucoObjects.Add(arucoObject.Dictionary, arucoObjectsCollection); DictionaryAdded(arucoObject.Dictionary); } // Return if the ArUco object is already in the list else { if (arucoObjectsCollection.ContainsKey(arucoObject.ArucoHashCode)) { return; } } // Suscribe to property events on the aruco object arucoObject.PropertyUpdating += ArucoObject_PropertyUpdating; arucoObject.PropertyUpdated += ArucoObject_PropertyUpdated; // Add the ArUco object to the list arucoObjectsCollection.Add(arucoObject.ArucoHashCode, arucoObject); ArucoObjectAdded(arucoObject); } public virtual void RemoveArucoObject(ArucoObject arucoObject) { // Find the list with the same dictionary than the ArUco object to remove Dictionary arucoObjectsCollection = null; foreach (var arucoObjectDictionary in ArucoObjects) { if (arucoObjectDictionary.Key.Name == arucoObject.Dictionary.Name || arucoObjectDictionary.Key == arucoObject.Dictionary) { arucoObjectsCollection = arucoObjectDictionary.Value; break; } } if (arucoObjectsCollection == null) { throw new ArgumentException("Can't remove the ArUco object: not found.", "arucoObject"); } // Remove the ArUco object arucoObjectsCollection.Remove(arucoObject.ArucoHashCode); ArucoObjectRemoved(arucoObject); // Unsuscribe to property events on the aruco object arucoObject.PropertyUpdating -= ArucoObject_PropertyUpdating; arucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated; // If the list is empty, remove it with its dictionary if (arucoObjectsCollection.Count == 0) { ArucoObjects.Remove(arucoObject.Dictionary); DictionaryRemoved(arucoObject.Dictionary); } } public virtual HashSet GetArucoObjects(Aruco.Dictionary dictionary) where U : ArucoObject { if (!ArucoObjects.ContainsKey(dictionary)) { throw new ArgumentException("This dictionary is not found.", "dictionary"); } HashSet arucoTObjectsCollection = new HashSet(); foreach (var arucoObject in ArucoObjects[dictionary]) { U arucoTObject = arucoObject.Value as U; if (arucoTObject != null) { arucoTObjectsCollection.Add(arucoTObject); } } return arucoTObjectsCollection; } // Methods /// /// Remove an ArucoObject from the list, before the its properties will be updated. /// /// The updated ArUco object. protected virtual void ArucoObject_PropertyUpdating(ArucoObject arucoObject) { RemoveArucoObject(arucoObject); } /// /// Re-adds the updated ArUco object the list. /// /// The updated ArUco object. protected virtual void ArucoObject_PropertyUpdated(ArucoObject arucoObject) { AddArucoObject(arucoObject); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsController.cs.meta ================================================ fileFormatVersion: 2 guid: 7ba29fe720f3b0f49ac8d8433b75b781 timeCreated: 1484775909 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsTracker.cs ================================================ using ArucoUnity.Cameras.Displays; using ArucoUnity.Plugin; using ArucoUnity.Utilities; using UnityEngine; using System; using System.Collections.Generic; namespace ArucoUnity.Objects.Trackers { /// /// Detects , displays detections and applies the estimated transforms to gameObjects associated to the ArUco objects. /// /// See the OpenCV documentation for more information about the marker detection: http://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html /// public class ArucoObjectsTracker : ArucoObjectsController, IArucoObjectsTracker { // Editor fields [SerializeField] [Tooltip("The display associated with the camera.")] private ArucoCameraDisplay arucoCameraDisplay; [SerializeField] [Tooltip("Apply refine strategy to detect more markers using the boards in the Aruco Object list.")] private bool refineDetectedMarkers = true; [SerializeField] [Tooltip("Display the detected markers in the CameraImageTexture.")] private bool drawDetectedMarkers = true; [SerializeField] [Tooltip("Display the rejected markers candidates.")] private bool drawRejectedCandidates = false; [SerializeField] [Tooltip("Display the axis of the detected boards and diamonds.")] private bool drawAxes = true; [SerializeField] [Tooltip("Display the markers of the detected ChArUco boards.")] private bool drawDetectedCharucoMarkers = true; [SerializeField] [Tooltip("Display the detected diamonds.")] private bool drawDetectedDiamonds = true; // IArucoObjectsTracker properties public IArucoCameraDisplay ArucoCameraDisplay { get; set; } public bool RefineDetectedMarkers { get { return refineDetectedMarkers; } set { refineDetectedMarkers = value; } } public bool DrawDetectedMarkers { get { return drawDetectedMarkers; } set { drawDetectedMarkers = value; } } public bool DrawRejectedCandidates { get { return drawRejectedCandidates; } set { drawRejectedCandidates = value; } } public bool DrawAxes { get { return drawAxes; } set { drawAxes = value; } } public bool DrawDetectedCharucoMarkers { get { return drawDetectedCharucoMarkers; } set { drawDetectedCharucoMarkers = value; } } public bool DrawDetectedDiamonds { get { return drawDetectedDiamonds; } set { drawDetectedDiamonds = value; } } public ArucoMarkerTracker MarkerTracker { get; protected set; } // Variables protected Dictionary additionalTrackers; protected ArucoCameraSeparateThread trackingThread; // MonoBehaviour methods /// /// Initializes the trackers list and sets from editor field if not null. /// protected override void Awake() { base.Awake(); MarkerTracker = new ArucoMarkerTracker(); additionalTrackers = new Dictionary() { { typeof(ArucoGridBoard), new ArucoGridBoardTracker() }, { typeof(ArucoCharucoBoard), new ArucoCharucoBoardTracker() }, { typeof(ArucoDiamond), new ArucoDiamondTracker() } }; if (arucoCameraDisplay != null) { ArucoCameraDisplay = arucoCameraDisplay; } } // ConfigurableController methods /// /// Add as dependency. /// protected override void Configuring() { if (ArucoCameraDisplay == null) { throw new ArgumentNullException("ArucoCameraDisplay", "This property needs to be set for the configuration."); } ArucoCamera = ArucoCameraDisplay.ArucoCamera; AddDependency(ArucoCameraDisplay); base.Configuring(); } /// /// Initializes the tracking, activates the trackers, susbcribes to the and /// events and starts the tracking thread. /// protected override void Starting() { base.Starting(); MarkerTracker.Activate(this); foreach (var arucoObjectDictionary in ArucoObjects) { foreach (var arucoObject in arucoObjectDictionary.Value) { ArucoObjectsController_ArucoObjectAdded(arucoObject.Value); } } ArucoObjectAdded += ArucoObjectsController_ArucoObjectAdded; ArucoObjectRemoved += ArucoObjectsController_ArucoObjectRemoved; ArucoCamera.ImagesUpdated += ArucoCamera_ImagesUpdated; trackingThread = new ArucoCameraSeparateThread(ArucoCamera, TrackArucoObjects) { CopyBackImages = DrawDetectedMarkers || DrawRejectedCandidates || DrawAxes || DrawDetectedCharucoMarkers || DrawDetectedDiamonds }; trackingThread.Start(); } /// /// Unsuscribes from ArucoObjectController events, deactivates the trackers and abort the tracking thread and stops the tracking thread. /// protected override void Stopping() { base.Stopping(); trackingThread.Stop(); ArucoCamera.ImagesUpdated -= ArucoCamera_ImagesUpdated; ArucoObjectAdded -= ArucoObjectsController_ArucoObjectAdded; ArucoObjectRemoved -= ArucoObjectsController_ArucoObjectRemoved; MarkerTracker.Deactivate(); foreach (var tracker in additionalTrackers) { if (tracker.Value.IsActivated) { tracker.Value.Deactivate(); } } } // ArucoObjectController methods /// /// Activates the tracker associated with the and configure its gameObject. /// /// The added ArUco object. protected virtual void ArucoObjectsController_ArucoObjectAdded(ArucoObject arucoObject) { if (arucoObject.GetType() != typeof(ArucoMarker)) { ArucoObjectTracker tracker = null; if (!additionalTrackers.TryGetValue(arucoObject.GetType(), out tracker)) { throw new ArgumentException("No tracker found for the type '" + arucoObject.GetType() + "'.", "arucoObject"); } else if (!tracker.IsActivated) { tracker.Activate(this); } } } /// /// Deactivates the tracker associated with the if it was the last one of this type. /// /// The removed protected virtual void ArucoObjectsController_ArucoObjectRemoved(ArucoObject arucoObject) { ArucoObjectTracker tracker = null; if (arucoObject.GetType() == typeof(ArucoMarker) || !additionalTrackers.TryGetValue(arucoObject.GetType(), out tracker)) { return; } if (tracker.IsActivated) { bool deactivateTracker = true; // Try to find at leat one object of the same type as arucoObject foreach (var arucoObjectDictionary in ArucoObjects) { foreach (var arucoObject2 in arucoObjectDictionary.Value) { if (arucoObject2.GetType() == arucoObject.GetType()) { deactivateTracker = false; break; } } if (!deactivateTracker) { break; } } if (deactivateTracker) { tracker.Deactivate(); } } } // IArucoObjectsTracker Methods public void DeactivateArucoObjects() { foreach (var arucoObjectDictionary in ArucoObjects) { foreach (var arucoObject in arucoObjectDictionary.Value) { arucoObject.Value.gameObject.SetActive(false); } } } public void Detect(Cv.Mat[] images) { if (!IsConfigured) { throw new Exception("The tracker must be configured before tracking ArUco objects."); } ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) => { tracker.Detect(cameraId, dictionary, images[cameraId]); }); } public void Detect() { Detect(ArucoCamera.Images); } public void Draw(Cv.Mat[] images) { if (!IsConfigured) { throw new Exception("The tracker must be configured before tracking ArUco objects."); } ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) => { tracker.Draw(cameraId, dictionary, images[cameraId]); }); } public void Draw() { Draw(ArucoCamera.Images); } public void EstimateTransforms() { if (!IsConfigured) { throw new Exception("The tracker must be configured before tracking ArUco objects."); } ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) => { tracker.EstimateTransforms(cameraId, dictionary); }); } public void UpdateTransforms() { if (!IsConfigured) { throw new Exception("The tracker must be configured before tracking ArUco objects."); } ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) => { tracker.UpdateTransforms(cameraId, dictionary); }); } // Methods /// /// Updates the tracking thread with , calls /// and and stops if there was an exception from this thread. /// protected void ArucoCamera_ImagesUpdated() { try { trackingThread.Update(ArucoCamera.ImageDatas); if (trackingThread.ImagesUpdated) { DeactivateArucoObjects(); if (ArucoCameraDisplay != null) { UpdateTransforms(); } } } catch (Exception e) { StopController(); throw e; } } /// /// Detects and estimates the transforms of the detected ArUco objects. Executed on a separated tracking thread. /// protected void TrackArucoObjects(Cv.Mat[] images) { Detect(images); EstimateTransforms(); if (trackingThread.CopyBackImages) { Draw(images); } } /// /// Executes an on all the activated . /// protected void ExecuteOnActivatedTrackers(Action actionOnTracker) { for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++) { foreach (var arucoObjectDictionary in ArucoObjects) { actionOnTracker(MarkerTracker, cameraId, arucoObjectDictionary.Key); foreach (var tracker in additionalTrackers) { if (tracker.Value.IsActivated) { actionOnTracker(tracker.Value, cameraId, arucoObjectDictionary.Key); } } } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 255fe063ecb04c04296ffd43ed49ae04 timeCreated: 1475701582 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/DetectorParametersController.cs ================================================ using ArucoUnity.Plugin; using UnityEngine; namespace ArucoUnity.Objects.Trackers { /// /// Editor controller for . /// public class DetectorParametersController : MonoBehaviour, IHasDetectorParameter { // Editor fields [SerializeField] [Tooltip("The minimum window size for adaptive thresholding before finding contours (default 3).")] private int adaptiveThreshWinSizeMin = 3; [SerializeField] [Tooltip("The maximum window size for adaptive thresholding before finding contours (default 23).")] private int adaptiveThreshWinSizeMax = 23; [SerializeField] [Tooltip("The increments from adaptiveThreshWinSizeMin to adaptiveThreshWinSizeMax during the thresholding (default 10).")] private int adaptiveThreshWinSizeStep = 10; [SerializeField] [Tooltip("The constant for adaptive thresholding before finding contours (default 7).")] private double adaptiveThreshConstant = 7; [SerializeField] [Tooltip("The minimum perimeter for marker contour to be detected. This is defined as a rate respect to the maximum dimension of the input image (default 0.03).")] private double minMarkerPerimeterRate = 0.03; [SerializeField] [Tooltip("The maximum perimeter for marker contour to be detected. This is defined as a rate respect to the maximum dimension of the input image (default 4.0).")] private double maxMarkerPerimeterRate = 4.0; [SerializeField] [Tooltip("The minimum accuracy during the polygonal approximation process to determine which contours are squares.")] private double polygonalApproxAccuracyRate = 0.03; [SerializeField] [Tooltip("The minimum distance between corners for detected markers relative to its perimeter (default 0.05).")] private double minCornerDistanceRate = 0.05; [SerializeField] [Tooltip("The minimum distance of any corner to the image border for detected markers (in pixels) (default 3).")] private int minDistanceToBorder = 3; [SerializeField] [Tooltip("The minimum mean distance beetween two marker corners to be considered similar, so that the smaller one is removed. The rate is relative to the smaller perimeter of the two markers (default 0.05).")] private double minMarkerDistanceRate = 0.05; [SerializeField] [Tooltip("The method to use for corner refinement.")] private Aruco.CornerRefineMethod cornerRefinementMethod = Aruco.CornerRefineMethod.None; [SerializeField] [Tooltip("The window size for the corner refinement process (in pixels) (default 5).")] private int cornerRefinementWinSize = 5; [SerializeField] [Tooltip("The maximum number of iterations for stop criteria of the corner refinement process (default 30).")] private int cornerRefinementMaxIterations = 30; [SerializeField] [Tooltip("The minimum error for the stop cristeria of the corner refinement process (default: 0.1).")] private double cornerRefinementMinAccuracy = 0.1; [SerializeField] [Tooltip("The number of bits of the marker border, i.e. marker border width (default 1).")] private int markerBorderBits = 1; [SerializeField] [Tooltip("The number of bits (per dimension) for each cell of the marker when removing the perspective (default 8).")] private int perspectiveRemovePixelPerCell = 8; [SerializeField] [Tooltip("The width of the margin of pixels on each cell not considered for the determination of the cell bit. Represents the rate respect to the total size of the cell, i.e. perpectiveRemovePixelPerCell (default 0.13).")] private double perspectiveRemoveIgnoredMarginPerCell = 0.13; [SerializeField] [Tooltip("The maximum number of accepted erroneous bits in the border (i.e. number of allowed white bits in the border). Represented as a rate respect to the total number of bits per marker (default 0.35).")] private double maxErroneousBitsInBorderRate = 0.35; [SerializeField] [Tooltip("The minimun standard deviation in pixels values during the decodification step to apply Otsu thresholding (otherwise, all the bits are sets to 0 or 1 depending on mean higher than 128 or not) (default 5.0).")] private double minOtsuStdDev = 5.0; [SerializeField] [Tooltip("The maximun error correction capability for each dictionary (default 0.6).")] private double errorCorrectionRate = 0.6; // Properties /// /// Gets or sets the . /// public Aruco.DetectorParameters DetectorParameters { get; set; } // MonoBehaviour methods /// /// Initializes from editor fields. /// protected virtual void Awake() { DetectorParameters = new Aruco.DetectorParameters(); DetectorParameters.AdaptiveThreshWinSizeMin = adaptiveThreshWinSizeMin; DetectorParameters.AdaptiveThreshWinSizeMax = adaptiveThreshWinSizeMax; DetectorParameters.AdaptiveThreshWinSizeStep = adaptiveThreshWinSizeStep; DetectorParameters.AdaptiveThreshConstant = adaptiveThreshConstant; DetectorParameters.MinMarkerPerimeterRate = minMarkerPerimeterRate; DetectorParameters.MaxMarkerPerimeterRate = maxMarkerPerimeterRate; DetectorParameters.PolygonalApproxAccuracyRate = polygonalApproxAccuracyRate; DetectorParameters.MinCornerDistanceRate = minCornerDistanceRate; DetectorParameters.MinDistanceToBorder = minDistanceToBorder; DetectorParameters.MinMarkerDistanceRate = minMarkerDistanceRate; DetectorParameters.CornerRefinementMethod = cornerRefinementMethod; DetectorParameters.CornerRefinementWinSize = cornerRefinementWinSize; DetectorParameters.CornerRefinementMaxIterations = cornerRefinementMaxIterations; DetectorParameters.CornerRefinementMinAccuracy = cornerRefinementMinAccuracy; DetectorParameters.MarkerBorderBits = markerBorderBits; DetectorParameters.PerspectiveRemovePixelPerCell = perspectiveRemovePixelPerCell; DetectorParameters.PerspectiveRemoveIgnoredMarginPerCell = perspectiveRemoveIgnoredMarginPerCell; DetectorParameters.MaxErroneousBitsInBorderRate = maxErroneousBitsInBorderRate; DetectorParameters.MinOtsuStdDev = minOtsuStdDev; DetectorParameters.ErrorCorrectionRate = errorCorrectionRate; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/DetectorParametersController.cs.meta ================================================ fileFormatVersion: 2 guid: 91ed676394d8639429b6c76f63c37c18 timeCreated: 1475378694 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsController.cs ================================================ using System.Collections.Generic; using ArucoUnity.Plugin; using System; namespace ArucoUnity.Objects.Trackers { /// /// Manages a list of . /// public interface IArucoObjectsController { // Events /// /// Called when an ArUco object has been added to . /// event Action ArucoObjectAdded; /// /// Called when an ArUco object has been removed from . /// event Action ArucoObjectRemoved; /// /// Called when a new dictionary has been added to . /// event Action DictionaryAdded; /// /// Called when a dictionary has been removed from . /// event Action DictionaryRemoved; // Properties /// /// Gets the list of the ArUco objects to detect. /// Dictionary> ArucoObjects { get; } // Methods /// /// Adds an ArUco object to the list. /// /// The ArUco object to add. void AddArucoObject(ArucoObject arucoObject); /// /// Removes an ArUco object to the list. /// /// The ArUco object to remove. void RemoveArucoObject(ArucoObject arucoObject); /// /// Returns a sublist from of ArUco objects of a precise type in a certain /// . /// /// The type of the ArUco objects in the returned sublist. /// The to use. /// The sublist. HashSet GetArucoObjects(Aruco.Dictionary dictionary) where U : ArucoObject; } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsController.cs.meta ================================================ fileFormatVersion: 2 guid: 9909cdd7f1ee6294e8fba572402d7a7f timeCreated: 1511476597 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsTracker.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Cameras.Displays; using ArucoUnity.Plugin; namespace ArucoUnity.Objects.Trackers { /// /// /// public interface IArucoObjectsTracker : IArucoCameraController, IArucoObjectsController, IHasDetectorParameter { // Properties /// /// Gets or sets the optional camera display associated with the ArucoCamera. /// IArucoCameraDisplay ArucoCameraDisplay { get; set; } /// /// Gets or sets if using refine strategy to detect more markers using the in the /// list. /// bool RefineDetectedMarkers { get; set; } /// /// Get or sets if displaying the detected in the . /// bool DrawDetectedMarkers { get; set; } /// /// Get or sets if displaying the rejected markers candidates. /// bool DrawRejectedCandidates { get; set; } /// /// Get or sets if displaying the axes of each detected and . /// bool DrawAxes { get; set; } /// /// Get or sets if displaying the markers of each detected . /// bool DrawDetectedCharucoMarkers { get; set; } /// /// Get or sets if displaying each detected . /// bool DrawDetectedDiamonds { get; set; } /// /// Gets the ArUco markers tracker used. /// ArucoMarkerTracker MarkerTracker { get; } // Methods /// /// Hides all the ArUco objects. /// void DeactivateArucoObjects(); /// /// Detects the ArUco objects on a set of custom images. /// /// The images set. void Detect(Cv.Mat[] images); /// /// Detects the ArUco objects on the current . /// void Detect(); /// /// Draws each detected on a set of custom images. /// /// The images set to draw. void Draw(Cv.Mat[] images); /// /// Draws each detected on the . /// void Draw(); /// /// Estimates the transforms of each detected on the current . /// void EstimateTransforms(); /// /// Updates transforms of each detected . must be set. /// void UpdateTransforms(); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsTracker.cs.meta ================================================ fileFormatVersion: 2 guid: 100612681f7e9a9478271eac5fe2f881 timeCreated: 1511474366 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IHasDetectorParameter.cs ================================================ using ArucoUnity.Plugin; namespace ArucoUnity.Objects.Trackers { /// /// Contains a . /// public interface IHasDetectorParameter { /// /// Gets or sets the parameters to use for the detection. /// Aruco.DetectorParameters DetectorParameters { get; set; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers/IHasDetectorParameter.cs.meta ================================================ fileFormatVersion: 2 guid: e3afb0b94e146264397a23aa41a26237 timeCreated: 1511476549 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects/Trackers.meta ================================================ fileFormatVersion: 2 guid: 5e3649083fbdd46458f07c658d8492ce folderAsset: yes timeCreated: 1488568181 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Objects.meta ================================================ fileFormatVersion: 2 guid: 53fa77e13e8bd324fb58e783de3ecd6f folderAsset: yes timeCreated: 1488568297 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Aruco.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { // Enums public enum PredefinedDictionaryName { Dict4x4_50 = 0, Dict4x4_100, Dict4x4_250, Dict4x4_1000, Dict5x5_50, Dict5x5_100, Dict5x5_250, Dict5x5_1000, Dict6x6_50, Dict6x6_100, Dict6x6_250, Dict6x6_1000, Dict7x7_50, Dict7x7_100, Dict7x7_250, Dict7x7_1000, DictArucoOriginal } public enum CornerRefineMethod { None, /// No corner refinement Subpix, /// Refine the corners using subpix Contour /// Refine the corners using the contour-points } // Native functions [DllImport("ArucoUnityPlugin")] static extern double au_calibrateCameraAruco(IntPtr corners, IntPtr ids, IntPtr counter, IntPtr board, IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags, IntPtr criteria, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern double au_calibrateCameraCharuco(IntPtr charucoCorners, IntPtr charucoIds, IntPtr board, IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags, IntPtr criteria, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_detectCharucoDiamond(IntPtr image, IntPtr markerCorners, IntPtr markerIds, float squareMarkerLengthRate, out IntPtr diamondCorners, out IntPtr diamondIds, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_detectMarkers(IntPtr image, IntPtr dictionary, out IntPtr corners, out IntPtr ids, IntPtr parameters, out IntPtr rejectedImgPoints, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_drawAxis(IntPtr image, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr rvec, IntPtr tvec, float length, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_drawCharucoDiamond(IntPtr dictionary, IntPtr ids, int squareLength, int markerLength, out IntPtr img, int marginSize, int borderBits, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_drawDetectedCornersCharuco(IntPtr image, IntPtr charucoCorners, IntPtr charucoIds, IntPtr cornerColor, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_drawDetectedDiamonds(IntPtr image, IntPtr diamondCorners, IntPtr diamondIds, IntPtr borderColor, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_drawDetectedMarkers(IntPtr image, IntPtr corners, IntPtr ids, IntPtr borderColor, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern int au_estimatePoseBoard(IntPtr corners, IntPtr ids, IntPtr board, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvec, out IntPtr tvec, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern bool au_estimatePoseCharucoBoard(IntPtr charucoCorners, IntPtr charucoIds, IntPtr board, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvec, out IntPtr tvec, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_estimatePoseSingleMarkers(IntPtr corners, float markerLength, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_generateCustomDictionary(int nMarkers, int markerSize, IntPtr baseDictionary, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_getBoardObjectAndImagePoints(IntPtr board, IntPtr detectedCorners, IntPtr detectedIds, out IntPtr objPoints, out IntPtr imgPoints, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_getPredefinedDictionary(PredefinedDictionaryName name); [DllImport("ArucoUnityPlugin")] static extern int au_interpolateCornersCharuco(IntPtr markerCorners, IntPtr markerIds, IntPtr image, IntPtr board, out IntPtr charucoCorners, out IntPtr charucoIds, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_refineDetectedMarkers(IntPtr image, IntPtr board, IntPtr detectedCorners, IntPtr detectedIds, IntPtr rejectedCorners, IntPtr cameraMatrix, IntPtr distCoeffs, float minRepDistance, float errorCorrectionRate, bool checkAllOrders, IntPtr recoveredIdxs, IntPtr parameters, IntPtr exception); // Static methods public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags, Cv.TermCriteria criteria) { Cv.Exception exception = new Cv.Exception(); IntPtr rvecsPtr, tvecsPtr; double reProjectionError = au_calibrateCameraAruco(corners.CppPtr, ids.CppPtr, counter.CppPtr, board.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr); rvecs = new Std.VectorMat(rvecsPtr); tvecs = new Std.VectorMat(tvecsPtr); exception.Check(); return reProjectionError; } public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags = 0) { Cv.TermCriteria criteria = new Cv.TermCriteria(Cv.TermCriteria.Type.Count | Cv.TermCriteria.Type.Eps, 30, Cv.EPSILON); return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria); } public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs) { Std.VectorMat tvecs; return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs); } public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs) { Std.VectorMat rvecs; return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs); } public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags, Cv.TermCriteria criteria) { Cv.Exception exception = new Cv.Exception(); IntPtr rvecsPtr, tvecsPtr; double reProjectionError = au_calibrateCameraCharuco(charucoCorners.CppPtr, charucoIds.CppPtr, board.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr); rvecs = new Std.VectorMat(rvecsPtr); tvecs = new Std.VectorMat(tvecsPtr); exception.Check(); return reProjectionError; } public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags = 0) { Cv.TermCriteria criteria = new Cv.TermCriteria(Cv.TermCriteria.Type.Count | Cv.TermCriteria.Type.Eps, 30, Cv.EPSILON); return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria); } public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs) { Std.VectorMat tvecs; return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs); } public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board, Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs) { Std.VectorMat rvecs; return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs); } public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds, Cv.Mat cameraMatrix, Cv.Mat distCoeffs) { Cv.Exception exception = new Cv.Exception(); IntPtr diamondCornersPtr, diamondIdsPtr; au_detectCharucoDiamond(image.CppPtr, markerCorners.CppPtr, markerIds.CppPtr, squareMarkerLengthRate, out diamondCornersPtr, out diamondIdsPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, exception.CppPtr); diamondCorners = new Std.VectorVectorPoint2f(diamondCornersPtr); diamondIds = new Std.VectorVec4i(diamondIdsPtr); exception.Check(); } public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds, Cv.Mat cameraMatrix) { Cv.Mat distCoeffs = new Cv.Mat(); DetectCharucoDiamond(image, markerCorners, markerIds, squareMarkerLengthRate, out diamondCorners, out diamondIds, cameraMatrix, distCoeffs); } public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds) { Cv.Mat cameraMatrix = new Cv.Mat(); DetectCharucoDiamond(image, markerCorners, markerIds, squareMarkerLengthRate, out diamondCorners, out diamondIds, cameraMatrix); } public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids, DetectorParameters parameters, out Std.VectorVectorPoint2f rejectedImgPoints) { Cv.Exception exception = new Cv.Exception(); IntPtr cornersPtr, idsPtr, rejectedPtr; au_detectMarkers(image.CppPtr, dictionary.CppPtr, out cornersPtr, out idsPtr, parameters.CppPtr, out rejectedPtr, exception.CppPtr); corners = new Std.VectorVectorPoint2f(cornersPtr); ids = new Std.VectorInt(idsPtr); rejectedImgPoints = new Std.VectorVectorPoint2f(rejectedPtr); exception.Check(); } public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids, DetectorParameters parameters) { Std.VectorVectorPoint2f rejectedImgPoints; DetectMarkers(image, dictionary, out corners, out ids, parameters, out rejectedImgPoints); } public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids) { DetectorParameters parameters = new DetectorParameters(); DetectMarkers(image, dictionary, out corners, out ids, parameters); } public static void DrawAxis(Cv.Mat image, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, Cv.Vec3d rvec, Cv.Vec3d tvec, float length) { Cv.Exception exception = new Cv.Exception(); au_drawAxis(image.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, rvec.CppPtr, tvec.CppPtr, length, exception.CppPtr); exception.Check(); } public static void DrawCharucoDiamond(Dictionary dictionary, Cv.Vec4i ids, int squareLength, int markerLength, out Cv.Mat image, int marginSize = 0, int borderBits = 1) { Cv.Exception exception = new Cv.Exception(); IntPtr imagePtr; au_drawCharucoDiamond(dictionary.CppPtr, ids.CppPtr, squareLength, markerLength, out imagePtr, marginSize, borderBits, exception.CppPtr); image = new Cv.Mat(imagePtr); exception.Check(); } public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds, Cv.Scalar cornerColor) { Cv.Exception exception = new Cv.Exception(); au_drawDetectedCornersCharuco(image.CppPtr, charucoCorners.CppPtr, charucoIds.CppPtr, cornerColor.CppPtr, exception.CppPtr); exception.Check(); } public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds) { Cv.Scalar cornerColor = new Cv.Scalar(255, 0, 0); DrawDetectedCornersCharuco(image, charucoCorners, charucoIds, cornerColor); } public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners) { Std.VectorInt charucoIds = new Std.VectorInt(); DrawDetectedCornersCharuco(image, charucoCorners, charucoIds); } public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorVec4i diamondIds, Cv.Scalar borderColor) { Cv.Exception exception = new Cv.Exception(); au_drawDetectedDiamonds(image.CppPtr, diamondCorners.CppPtr, diamondIds.CppPtr, borderColor.CppPtr, exception.CppPtr); exception.Check(); } public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorVec4i diamondIds) { Cv.Scalar borderColor = new Cv.Scalar(0, 0, 255); DrawDetectedDiamonds(image, diamondCorners, diamondIds, borderColor); } public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners) { Std.VectorVec4i diamondIds = new Std.VectorVec4i(); DrawDetectedDiamonds(image, diamondCorners, diamondIds); } public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f corners, Std.VectorInt ids, Cv.Scalar borderColor) { Cv.Exception exception = new Cv.Exception(); au_drawDetectedMarkers(image.CppPtr, corners.CppPtr, ids.CppPtr, borderColor.CppPtr, exception.CppPtr); exception.Check(); } public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorInt ids) { Cv.Scalar borderColor = new Cv.Scalar(0, 255, 0); DrawDetectedMarkers(image, diamondCorners, ids, borderColor); } public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners) { Std.VectorInt ids = new Std.VectorInt(); DrawDetectedMarkers(image, diamondCorners, ids); } public static int EstimatePoseBoard(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Board board, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Cv.Vec3d rvec, out Cv.Vec3d tvec) { Cv.Exception exception = new Cv.Exception(); IntPtr rvecPtr, tvecPtr; int valid = au_estimatePoseBoard(corners.CppPtr, ids.CppPtr, board.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecPtr, out tvecPtr, exception.CppPtr); rvec = new Cv.Vec3d(rvecPtr); tvec = new Cv.Vec3d(tvecPtr); exception.Check(); return valid; } public static bool EstimatePoseCharucoBoard(Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds, CharucoBoard board, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Cv.Vec3d rvec, out Cv.Vec3d tvec) { Cv.Exception exception = new Cv.Exception(); IntPtr rvecPtr, tvecPtr; bool valid = au_estimatePoseCharucoBoard(charucoCorners.CppPtr, charucoIds.CppPtr, board.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecPtr, out tvecPtr, exception.CppPtr); rvec = new Cv.Vec3d(rvecPtr); tvec = new Cv.Vec3d(tvecPtr); exception.Check(); return valid; } public static void EstimatePoseSingleMarkers(Std.VectorVectorPoint2f corners, float markerLength, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs) { Cv.Exception exception = new Cv.Exception(); IntPtr rvecsPtr, tvecsPtr; au_estimatePoseSingleMarkers(corners.CppPtr, markerLength, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, exception.CppPtr); rvecs = new Std.VectorVec3d(rvecsPtr); tvecs = new Std.VectorVec3d(tvecsPtr); exception.Check(); } public static Dictionary GenerateCustomDictionary(int nMarkers, int markerSize, Dictionary baseDictionary) { Cv.Exception exception = new Cv.Exception(); IntPtr dictionaryPtr = au_generateCustomDictionary(nMarkers, markerSize, baseDictionary.CppPtr, exception.CppPtr); exception.Check(); return new Dictionary(dictionaryPtr); } public static Dictionary GenerateCustomDictionary(int nMarkers, int markerSize) { Dictionary baseDictionary = new Dictionary(); return GenerateCustomDictionary(nMarkers, markerSize, baseDictionary); } public static void GetBoardObjectAndImagePoints(Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, out Std.VectorPoint3f objPoints, out Std.VectorPoint2f imgPoints) { Cv.Exception exception = new Cv.Exception(); IntPtr objPointsPtr, imgPointsPtr; au_getBoardObjectAndImagePoints(board.CppPtr, detectedCorners.CppPtr, detectedIds.CppPtr, out objPointsPtr, out imgPointsPtr, exception.CppPtr); objPoints = new Std.VectorPoint3f(objPointsPtr); imgPoints = new Std.VectorPoint2f(imgPointsPtr); exception.Check(); } public static Dictionary GetPredefinedDictionary(PredefinedDictionaryName name) { Dictionary dictionary = new Dictionary(au_getPredefinedDictionary(name)); dictionary.Name = name; return dictionary; } public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board, out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds, Cv.Mat cameraMatrix, Cv.Mat distCoeffs) { Cv.Exception exception = new Cv.Exception(); IntPtr charucoCornersPtr, charucoIdsPtr; int interpolateCorners = au_interpolateCornersCharuco(markerCorners.CppPtr, markerIds.CppPtr, image.CppPtr, board.CppPtr, out charucoCornersPtr, out charucoIdsPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, exception.CppPtr); charucoCorners = new Std.VectorPoint2f(charucoCornersPtr); charucoIds = new Std.VectorInt(charucoIdsPtr); exception.Check(); return interpolateCorners; } public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board, out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds, Cv.Mat cameraMatrix) { Cv.Mat distCoeffs = new Cv.Mat(); return InterpolateCornersCharuco(markerCorners, markerIds, image, board, out charucoCorners, out charucoIds, cameraMatrix, distCoeffs); } public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board, out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds) { Cv.Mat cameraMatrix = new Cv.Mat(); return InterpolateCornersCharuco(markerCorners, markerIds, image, board, out charucoCorners, out charucoIds, cameraMatrix); } public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance, float errorCorrectionRate, bool checkAllOrders, Std.VectorInt recoveredIdxs, DetectorParameters parameters) { Cv.Exception exception = new Cv.Exception(); au_refineDetectedMarkers(image.CppPtr, board.CppPtr, detectedCorners.CppPtr, detectedIds.CppPtr, rejectedCorners.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, minRepDistance, errorCorrectionRate, checkAllOrders, recoveredIdxs.CppPtr, parameters.CppPtr, exception.CppPtr); exception.Check(); } public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance, float errorCorrectionRate, bool checkAllOrders, Std.VectorInt recoveredIdxs) { DetectorParameters parameters = new DetectorParameters(); RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs, minRepDistance, errorCorrectionRate, checkAllOrders, recoveredIdxs, parameters); } public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance = 10f, float errorCorrectionRate = 3f, bool checkAllOrders = true) { Std.VectorInt recoveredIdxs = new Std.VectorInt(); RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs, minRepDistance, errorCorrectionRate, checkAllOrders, recoveredIdxs); } public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix) { Cv.Mat distCoeffs = new Cv.Mat(); RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs); } public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds, Std.VectorVectorPoint2f rejectedCorners) { Cv.Mat cameraMatrix = new Cv.Mat(); RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Aruco.cs.meta ================================================ fileFormatVersion: 2 guid: 1e66f16b23870c24c92ec8df1b018980 timeCreated: 1472228401 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Board.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { public abstract class Board : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Board_getDictionary(IntPtr board); [DllImport("ArucoUnityPlugin")] static extern void au_Board_setDictionary(IntPtr board, IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Board_getIds(IntPtr board); [DllImport("ArucoUnityPlugin")] static extern void au_Board_setIds(IntPtr board, IntPtr ids); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Board_getObjPoints(IntPtr board); [DllImport("ArucoUnityPlugin")] static extern void au_Board_setObjPoints(IntPtr board, IntPtr objPoints); // Constructors internal Board(IntPtr boardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(boardPtr, deleteResponsibility) { } // Properties public Dictionary Dictionary { get { return new Dictionary(au_Board_getDictionary(CppPtr), DeleteResponsibility.False); } set { au_Board_setDictionary(CppPtr, value.CppPtr); } } public Std.VectorInt Ids { get { return new Std.VectorInt(au_Board_getIds(CppPtr), DeleteResponsibility.False); } set { au_Board_setIds(CppPtr, value.CppPtr); } } public Std.VectorVectorPoint3f ObjPoints { get { return new Std.VectorVectorPoint3f(au_Board_getObjPoints(CppPtr), DeleteResponsibility.False); } set { au_Board_setObjPoints(CppPtr, value.CppPtr); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Board.cs.meta ================================================ fileFormatVersion: 2 guid: c836d2089a9caa447b37dc877890ca55 timeCreated: 1476143477 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/CharucoBoard.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { public class CharucoBoard : Board { // Native functions [DllImport("ArucoUnityPlugin")] static extern void au_CharucoBoard_delete(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern void au_CharucoBoard_draw(IntPtr charucoBoard, IntPtr outSize, out IntPtr img, int marginSize, int borderBits, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_CharucoBoard_getChessboardSize(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern float au_CharucoBoard_getMarkerLength(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern float au_CharucoBoard_getSquareLength(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_CharucoBoard_create(int squaresX, int squaresY, float squareLength, float markerLength, IntPtr dictionary, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_CharucoBoard_getChessboardCorners(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern void au_CharucoBoard_setChessboardCorners(IntPtr charucoBoard, IntPtr chessboardCorners); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_CharucoBoard_getNearestMarkerCorners(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern void au_CharucoBoard_setNearestMarkerCorners(IntPtr charucoBoard, IntPtr nearestMarkerCorners); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_CharucoBoard_getNearestMarkerIdx(IntPtr charucoBoard); [DllImport("ArucoUnityPlugin")] static extern void au_CharucoBoard_setNearestMarkerIdx(IntPtr charucoBoard, IntPtr nearestMarkerIdx); // Constructors & destructor internal CharucoBoard(IntPtr charucoBoardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(charucoBoardPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_CharucoBoard_delete(CppPtr); } // Properties public Std.VectorPoint3f ChessboardCorners { get { return new Std.VectorPoint3f(au_CharucoBoard_getChessboardCorners(CppPtr), DeleteResponsibility.False); } set { au_CharucoBoard_setChessboardCorners(CppPtr, value.CppPtr); } } public Std.VectorVectorInt MarkerCorners { get { return new Std.VectorVectorInt(au_CharucoBoard_getNearestMarkerCorners(CppPtr), DeleteResponsibility.False); } set { au_CharucoBoard_setNearestMarkerCorners(CppPtr, value.CppPtr); } } public Std.VectorVectorInt MarkerIdx { get { return new Std.VectorVectorInt(au_CharucoBoard_getNearestMarkerIdx(CppPtr), DeleteResponsibility.False); } set { au_CharucoBoard_setNearestMarkerIdx(CppPtr, value.CppPtr); } } // Static methods static public CharucoBoard Create(int squaresX, int squaresY, float squareLength, float markerLength, Dictionary dictionary) { Cv.Exception exception = new Cv.Exception(); IntPtr charucoBoardPtr = au_CharucoBoard_create(squaresX, squaresY, squareLength, markerLength, dictionary.CppPtr, exception.CppPtr); exception.Check(); return new CharucoBoard(charucoBoardPtr); } // Methods public void Draw(Cv.Size outSize, out Cv.Mat img, int marginSize = 0, int borderBits = 1) { Cv.Exception exception = new Cv.Exception(); IntPtr imgPtr; au_CharucoBoard_draw(CppPtr, outSize.CppPtr, out imgPtr, marginSize, borderBits, exception.CppPtr); img = new Cv.Mat(imgPtr); exception.Check(); } public Cv.Size GetChessboardSize() { return new Cv.Size(au_CharucoBoard_getChessboardSize(CppPtr)); } public float GetMarkerLength() { return au_CharucoBoard_getMarkerLength(CppPtr); } public float GetSquareLength() { return au_CharucoBoard_getSquareLength(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/CharucoBoard.cs.meta ================================================ fileFormatVersion: 2 guid: b7c76001850819d4ebef0bc79116259e timeCreated: 1476548350 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/DetectorParameters.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { public class DetectorParameters : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_DetectorParameters_create(); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_delete(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getAdaptiveThreshWinSizeMin(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setAdaptiveThreshWinSizeMin(IntPtr parameters, int adaptiveThreshWinSizeMin); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getAdaptiveThreshWinSizeMax(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setAdaptiveThreshWinSizeMax(IntPtr parameters, int adaptiveThreshWinSizeMax); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getAdaptiveThreshWinSizeStep(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setAdaptiveThreshWinSizeStep(IntPtr parameters, int adaptiveThreshWinSizeStep); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getAdaptiveThreshConstant(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setAdaptiveThreshConstant(IntPtr parameters, double adaptiveThreshConstant); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMinMarkerPerimeterRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMinMarkerPerimeterRate(IntPtr parameters, double minMarkerPerimeterRate); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMaxMarkerPerimeterRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMaxMarkerPerimeterRate(IntPtr parameters, double maxMarkerPerimeterRate); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getPolygonalApproxAccuracyRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setPolygonalApproxAccuracyRate(IntPtr parameters, double polygonalApproxAccuracyRate); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMinCornerDistanceRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMinCornerDistanceRate(IntPtr parameters, double minCornerDistanceRate); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getMinDistanceToBorder(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMinDistanceToBorder(IntPtr parameters, int minDistanceToBorder); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMinMarkerDistanceRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMinMarkerDistanceRate(IntPtr parameters, double minMarkerDistanceRate); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getCornerRefinementMethod(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setCornerRefinementMethod(IntPtr parameters, int cornerRefinementMethod); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getCornerRefinementWinSize(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setCornerRefinementWinSize(IntPtr parameters, int cornerRefinementWinSize); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getCornerRefinementMaxIterations(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setCornerRefinementMaxIterations(IntPtr parameters, int cornerRefinementMaxIterations); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getCornerRefinementMinAccuracy(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setCornerRefinementMinAccuracy(IntPtr parameters, double cornerRefinementMinAccuracy); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getMarkerBorderBits(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMarkerBorderBits(IntPtr parameters, int markerBorderBits); [DllImport("ArucoUnityPlugin")] static extern int au_DetectorParameters_getPerspectiveRemovePixelPerCell(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setPerspectiveRemovePixelPerCell(IntPtr parameters, int perspectiveRemovePixelPerCell); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getPerspectiveRemoveIgnoredMarginPerCell(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setPerspectiveRemoveIgnoredMarginPerCell(IntPtr parameters, double perspectiveRemoveIgnoredMarginPerCell); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMaxErroneousBitsInBorderRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMaxErroneousBitsInBorderRate(IntPtr parameters, double maxErroneousBitsInBorderRate); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getMinOtsuStdDev(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setMinOtsuStdDev(IntPtr parameters, double minOtsuStdDev); [DllImport("ArucoUnityPlugin")] static extern double au_DetectorParameters_getErrorCorrectionRate(IntPtr parameters); [DllImport("ArucoUnityPlugin")] static extern void au_DetectorParameters_setErrorCorrectionRate(IntPtr parameters, double errorCorrectionRate); public DetectorParameters() : base(au_DetectorParameters_create()) { } protected override void DeleteCppPtr() { au_DetectorParameters_delete(CppPtr); } public int AdaptiveThreshWinSizeMin { get { return au_DetectorParameters_getAdaptiveThreshWinSizeMin(CppPtr); } set { au_DetectorParameters_setAdaptiveThreshWinSizeMin(CppPtr, value); } } public int AdaptiveThreshWinSizeMax { get { return au_DetectorParameters_getAdaptiveThreshWinSizeMax(CppPtr); } set { au_DetectorParameters_setAdaptiveThreshWinSizeMax(CppPtr, value); } } public int AdaptiveThreshWinSizeStep { get { return au_DetectorParameters_getAdaptiveThreshWinSizeStep(CppPtr); } set { au_DetectorParameters_setAdaptiveThreshWinSizeStep(CppPtr, value); } } public double AdaptiveThreshConstant { get { return au_DetectorParameters_getAdaptiveThreshConstant(CppPtr); } set { au_DetectorParameters_setAdaptiveThreshConstant(CppPtr, value); } } public double MinMarkerPerimeterRate { get { return au_DetectorParameters_getMinMarkerPerimeterRate(CppPtr); } set { au_DetectorParameters_setMinMarkerPerimeterRate(CppPtr, value); } } public double MaxMarkerPerimeterRate { get { return au_DetectorParameters_getMaxMarkerPerimeterRate(CppPtr); } set { au_DetectorParameters_setMaxMarkerPerimeterRate(CppPtr, value); } } public double PolygonalApproxAccuracyRate { get { return au_DetectorParameters_getPolygonalApproxAccuracyRate(CppPtr); } set { au_DetectorParameters_setPolygonalApproxAccuracyRate(CppPtr, value); } } public double MinCornerDistanceRate { get { return au_DetectorParameters_getMinCornerDistanceRate(CppPtr); } set { au_DetectorParameters_setMinCornerDistanceRate(CppPtr, value); } } public int MinDistanceToBorder { get { return au_DetectorParameters_getMinDistanceToBorder(CppPtr); } set { au_DetectorParameters_setMinDistanceToBorder(CppPtr, value); } } public double MinMarkerDistanceRate { get { return au_DetectorParameters_getMinMarkerDistanceRate(CppPtr); } set { au_DetectorParameters_setMinMarkerDistanceRate(CppPtr, value); } } public CornerRefineMethod CornerRefinementMethod { get { return (CornerRefineMethod)au_DetectorParameters_getCornerRefinementMethod(CppPtr); } set { au_DetectorParameters_setCornerRefinementMethod(CppPtr, (int)value); } } public int CornerRefinementWinSize { get { return au_DetectorParameters_getCornerRefinementWinSize(CppPtr); } set { au_DetectorParameters_setCornerRefinementWinSize(CppPtr, value); } } public int CornerRefinementMaxIterations { get { return au_DetectorParameters_getCornerRefinementMaxIterations(CppPtr); } set { au_DetectorParameters_setCornerRefinementMaxIterations(CppPtr, value); } } public double CornerRefinementMinAccuracy { get { return au_DetectorParameters_getCornerRefinementMinAccuracy(CppPtr); } set { au_DetectorParameters_setCornerRefinementMinAccuracy(CppPtr, value); } } public int MarkerBorderBits { get { return au_DetectorParameters_getMarkerBorderBits(CppPtr); } set { au_DetectorParameters_setMarkerBorderBits(CppPtr, value); } } public int PerspectiveRemovePixelPerCell { get { return au_DetectorParameters_getPerspectiveRemovePixelPerCell(CppPtr); } set { au_DetectorParameters_setPerspectiveRemovePixelPerCell(CppPtr, value); } } public double PerspectiveRemoveIgnoredMarginPerCell { get { return au_DetectorParameters_getPerspectiveRemoveIgnoredMarginPerCell(CppPtr); } set { au_DetectorParameters_setPerspectiveRemoveIgnoredMarginPerCell(CppPtr, value); } } public double MaxErroneousBitsInBorderRate { get { return au_DetectorParameters_getMaxErroneousBitsInBorderRate(CppPtr); } set { au_DetectorParameters_setMaxErroneousBitsInBorderRate(CppPtr, value); } } public double MinOtsuStdDev { get { return au_DetectorParameters_getMinOtsuStdDev(CppPtr); } set { au_DetectorParameters_setMinOtsuStdDev(CppPtr, value); } } public double ErrorCorrectionRate { get { return au_DetectorParameters_getErrorCorrectionRate(CppPtr); } set { au_DetectorParameters_setErrorCorrectionRate(CppPtr, value); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/DetectorParameters.cs.meta ================================================ fileFormatVersion: 2 guid: 8e80dc63fddc4cc43a91d70107fbac55 timeCreated: 1473175557 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Dictionary.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { public class Dictionary : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Dictionary_new1(IntPtr bytesList, int markerSize, int maxCorrectionBits); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Dictionary_new2(IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern void au_Dictionary_delete(IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern void au_Dictionary_drawMarker(IntPtr dictionary, int id, int sidePixels, out IntPtr img, int borderBits, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern int au_Dictionary_getDistanceToId(IntPtr dictionary, IntPtr bits, int id, bool allRotations, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern bool au_Dictionary_identify(IntPtr dictionary, IntPtr onlyBits, out int idx, out int rotation, double maxCorrectionRate, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Dictionary_getBitsFromByteList(IntPtr byteList, int markerSize, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Dictionary_getByteListFromBits(IntPtr bits); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_Dictionary_getBytesList(IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern void au_Dictionary_setBytesList(IntPtr dictionary, IntPtr bytesList); [DllImport("ArucoUnityPlugin")] static extern int au_Dictionary_getMarkerSize(IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern void au_Dictionary_setMarkerSize(IntPtr dictionary, int markerSize); [DllImport("ArucoUnityPlugin")] static extern int au_Dictionary_getMaxCorrectionBits(IntPtr dictionary); [DllImport("ArucoUnityPlugin")] static extern void au_Dictionary_setMaxCorrectionBits(IntPtr dictionary, int maxCorrectionBits); // Constructors & destructor public Dictionary(Cv.Mat bytesList, int markerSize = 0, int maxCorrectionBits = 0) : base(au_Dictionary_new1(bytesList.CppPtr, markerSize, maxCorrectionBits)) { } public Dictionary() : this(new Cv.Mat()) { } public Dictionary(Dictionary dictionary) : base(au_Dictionary_new2(dictionary.CppPtr)) { } internal Dictionary(IntPtr dictionaryPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(dictionaryPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_Dictionary_delete(CppPtr); } // Properties public Cv.Mat BytesList { get { return new Cv.Mat(au_Dictionary_getBytesList(CppPtr), DeleteResponsibility.False); } set { au_Dictionary_setBytesList(CppPtr, value.CppPtr); } } public int MarkerSize { get { return au_Dictionary_getMarkerSize(CppPtr); } set { au_Dictionary_setMarkerSize(CppPtr, value); } } public int MaxCorrectionBits { get { return au_Dictionary_getMaxCorrectionBits(CppPtr); } set { au_Dictionary_setMaxCorrectionBits(CppPtr, value); } } public PredefinedDictionaryName Name { get; set; } // Static methods static public Cv.Mat GetBitsFromByteList(Cv.Mat byteList, int markerSiz) { Cv.Exception exception = new Cv.Exception(); Cv.Mat bits = new Cv.Mat(au_Dictionary_getBitsFromByteList(byteList.CppPtr, markerSiz, exception.CppPtr)); exception.Check(); return bits; } static public Cv.Mat GetByteListFromBits(IntPtr bits) { return new Cv.Mat(au_Dictionary_getByteListFromBits(bits)); } // Methods public void DrawMarker(int id, int sidePixels, out Cv.Mat img, int borderBits) { Cv.Exception exception = new Cv.Exception(); IntPtr imgPtr; au_Dictionary_drawMarker(CppPtr, id, sidePixels, out imgPtr, borderBits, exception.CppPtr); img = new Cv.Mat(imgPtr); exception.Check(); } public int GetDistanceToId(Dictionary dictionary, Cv.Mat bits, int id, bool allRotations = true) { Cv.Exception exception = new Cv.Exception(); int distanceToId = au_Dictionary_getDistanceToId(CppPtr, bits.CppPtr, id, allRotations, exception.CppPtr); exception.Check(); return distanceToId; } public bool Identify(Dictionary dictionary, Cv.Mat onlyBits, out int idx, out int rotation, double maxCorrectionRate) { Cv.Exception exception = new Cv.Exception(); bool result = au_Dictionary_identify(CppPtr, onlyBits.CppPtr, out idx, out rotation, maxCorrectionRate, exception.CppPtr); exception.Check(); return result; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/Dictionary.cs.meta ================================================ fileFormatVersion: 2 guid: e1cadcf5b9a8527448b40065a335f4c5 timeCreated: 1472228401 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/GridBoard.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Aruco { public class GridBoard : Board { // Native functions [DllImport("ArucoUnityPlugin")] static extern void au_GridBoard_delete(IntPtr gridBoard); [DllImport("ArucoUnityPlugin")] static extern void au_GridBoard_draw(IntPtr gridBoard, IntPtr outSize, out IntPtr img, int marginSize, int borderBits, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_GridBoard_getGridSize(IntPtr gridBoard); [DllImport("ArucoUnityPlugin")] static extern float au_GridBoard_getMarkerLength(IntPtr gridBoard); [DllImport("ArucoUnityPlugin")] static extern float au_GridBoard_getMarkerSeparation(IntPtr gridBoard); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_GridBoard_create(int markersX, int markersY, float markerLength, float markerSeparation, IntPtr dictionary, int firstMarker, IntPtr exception); // Constructors & destructor internal GridBoard(IntPtr gridBoardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(gridBoardPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_GridBoard_delete(CppPtr); } // Static methods static public GridBoard Create(int markersX, int markersY, float markerLength, float markerSeparation, Dictionary dictionary, int firstMarker = 0) { Cv.Exception exception = new Cv.Exception(); IntPtr gridBoardPtr = au_GridBoard_create(markersX, markersY, markerLength, markerSeparation, dictionary.CppPtr, firstMarker, exception.CppPtr); exception.Check(); return new GridBoard(gridBoardPtr); } // Methods public void Draw(Cv.Size outSize, out Cv.Mat img, int marginSize = 0, int borderBits = 1) { Cv.Exception exception = new Cv.Exception(); IntPtr imgPtr; au_GridBoard_draw(CppPtr, outSize.CppPtr, out imgPtr, marginSize, borderBits, exception.CppPtr); img = new Cv.Mat(imgPtr); exception.Check(); } public Cv.Size GetGridSize() { return new Cv.Size(au_GridBoard_getGridSize(CppPtr)); } public float GetMarkerLength() { return au_GridBoard_getMarkerLength(CppPtr); } public float GetMarkerSeparation() { return au_GridBoard_getMarkerSeparation(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco/GridBoard.cs.meta ================================================ fileFormatVersion: 2 guid: 1ff1c0d67b2576248929575388eb0dd8 timeCreated: 1476154441 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Aruco.meta ================================================ fileFormatVersion: 2 guid: 77e8d1821a6b36445ab1ed1546120ffd folderAsset: yes timeCreated: 1490303539 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Calib3d.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { // Enums public enum Calib { UseIntrinsicGuess = 0x00001, FixAspectRatio = 0x00002, FixPrincipalPoint = 0x00004, ZeroTangentDist = 0x00008, FixK1 = 0x00020, FixK2 = 0x00040, FixK3 = 0x00080, FixK4 = 0x00800, FixK5 = 0x01000, FixK6 = 0x02000, RationalModel = 0x04000, ThinPrismModel = 0x08000, FixS1S2S3S4 = 0x10000, TiltedModel = 0x40000, FixTauxTauy = 0x80000, // Following are only for stereo FixFocalLength = 0x00010, FixIntrinsic = 0x00100, SameFocalLength = 0x00200 }; public enum StereoRectifyFlags { ZeroDisparity = 1024 }; // Native functions [DllImport("ArucoUnityPlugin")] static extern double au_cv_calib3d_calibrateCamera1(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, IntPtr stdDeviationsIntrinsics, IntPtr stdDeviationsExtrinsics, IntPtr perViewErrors, int flags, IntPtr criteria, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern double au_cv_calib3d_calibrateCamera2(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags, IntPtr criteria, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_calib3d_initCameraMatrix2D(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize, double aspectRatio, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_calib3d_Rodrigues1(IntPtr rotationVector, out IntPtr rotationMatrix, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_calib3d_Rodrigues2(IntPtr rotationMatrix, out IntPtr rotationVector, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern double au_cv_calib3d_stereoCalibrate(IntPtr objectPoints, IntPtr imagePoints1, IntPtr imagePoints2, IntPtr cameraMatrix1, IntPtr distCoeffs1, IntPtr cameraMatrix2, IntPtr distCoeffs2, IntPtr imageSize, out IntPtr R, out IntPtr T, out IntPtr E, out IntPtr F, int flags, IntPtr criteria, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_calib3d_stereoRectify(IntPtr cameraMatrix1, IntPtr distCoeffs1, IntPtr cameraMatrix2, IntPtr distCoeffs2, IntPtr imageSize, IntPtr R, IntPtr T, out IntPtr R1, out IntPtr R2, out IntPtr P1, out IntPtr P2, out IntPtr Q, int flags, double alpha, IntPtr newImageSize, IntPtr validPixROI1, IntPtr validPixROI2, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_calib3d_getOptimalNewCameraMatrix(IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr imageSize, double scalingFactor, IntPtr newImageSize, IntPtr validPixROI, bool centerPrincipalPoint, IntPtr exception); // Static methods public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Std.VectorDouble stdDeviationsIntrinsics, Std.VectorDouble stdDeviationsExtrinsics, Std.VectorDouble perViewErrors, Calib flags, TermCriteria criteria) { Exception exception = new Exception(); IntPtr rvecsPtr, tvecsPtr; double error = au_cv_calib3d_calibrateCamera1(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, stdDeviationsIntrinsics.CppPtr, stdDeviationsExtrinsics.CppPtr, perViewErrors.CppPtr, (int)flags, criteria.CppPtr, exception.CppPtr); rvecs = new Std.VectorVec3d(rvecsPtr); tvecs = new Std.VectorVec3d(tvecsPtr); exception.Check(); return error; } public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Std.VectorDouble stdDeviationsIntrinsics, Std.VectorDouble stdDeviationsExtrinsics, Std.VectorDouble perViewErrors, Calib flags = 0) { TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, EPSILON); return CalibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, stdDeviationsIntrinsics, stdDeviationsExtrinsics, perViewErrors, flags, criteria); } public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria) { Exception exception = new Exception(); IntPtr rvecsPtr, tvecsPtr; double error = au_cv_calib3d_calibrateCamera2(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr); rvecs = new Std.VectorVec3d(rvecsPtr); tvecs = new Std.VectorVec3d(tvecsPtr); exception.Check(); return error; } public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags = 0) { TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, EPSILON); return CalibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria); } public static Mat InitCameraMatrix2D(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, double aspectRatio = 1.0) { Exception exception = new Exception(); IntPtr cameraMatrixPtr = au_cv_calib3d_initCameraMatrix2D(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, aspectRatio, exception.CppPtr); exception.Check(); return new Mat(cameraMatrixPtr); } public static void Rodrigues(Vec3d rotationVector, out Mat rotationMatrix) { Exception exception = new Exception(); IntPtr rotationMatrixPtr; au_cv_calib3d_Rodrigues1(rotationVector.CppPtr, out rotationMatrixPtr, exception.CppPtr); rotationMatrix = new Mat(rotationMatrixPtr); exception.Check(); } public static void Rodrigues(Mat rotationMatrix, out Vec3d rotationVector) { Exception exception = new Exception(); IntPtr rotationVectorPtr; au_cv_calib3d_Rodrigues2(rotationMatrix.CppPtr, out rotationVectorPtr, exception.CppPtr); rotationVector = new Vec3d(rotationVectorPtr); exception.Check(); } public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1, Std.VectorVectorPoint2f imagePoints2, Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, out Mat rotationMatrix, out Vec3d tvec, out Mat essentialMatrix, out Mat fundamentalMatrix, Calib flags, TermCriteria criteria) { Exception exception = new Exception(); IntPtr rotationMatrixPtr, tvecPtr, essentialMatrixPtr, fundamentalMatrixPtr; double error = au_cv_calib3d_stereoCalibrate(objectPoints.CppPtr, imagePoints1.CppPtr, imagePoints2.CppPtr, cameraMatrix1.CppPtr, distCoeffs1.CppPtr, cameraMatrix2.CppPtr, distCoeffs2.CppPtr, imageSize.CppPtr, out rotationMatrixPtr, out tvecPtr, out essentialMatrixPtr, out fundamentalMatrixPtr, (int)flags, criteria.CppPtr, exception.CppPtr); rotationMatrix = new Mat(rotationMatrixPtr); tvec = new Vec3d(tvecPtr); essentialMatrix = new Mat(essentialMatrixPtr); fundamentalMatrix = new Mat(fundamentalMatrixPtr); exception.Check(); return error; } public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1, Std.VectorVectorPoint2f imagePoints2, Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, out Mat rotationMatrix, out Vec3d tvec, out Mat essentialMatrix, out Mat fundamentalMatrix, Calib flags = Calib.FixIntrinsic) { TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, 1e-6); return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, out rotationMatrix, out tvec, out essentialMatrix, out fundamentalMatrix, flags, criteria); } public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix, Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2, out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize, Rect validPixROI1, Rect validPixROI2) { Exception exception = new Exception(); IntPtr rectificationMatrix1Ptr, rectificationMatrix2Ptr, projectionMatrix1Ptr, projectionMatrix2Ptr, disparityMatrixPtr; au_cv_calib3d_stereoRectify(cameraMatrix1.CppPtr, distCoeffs1.CppPtr, cameraMatrix2.CppPtr, distCoeffs2.CppPtr, imageSize.CppPtr, rotationMatrix.CppPtr, tvec.CppPtr, out rectificationMatrix1Ptr, out rectificationMatrix2Ptr, out projectionMatrix1Ptr, out projectionMatrix2Ptr, out disparityMatrixPtr, (int)flags, scalingFactor, newImageSize.CppPtr, validPixROI1.CppPtr, validPixROI2.CppPtr, exception.CppPtr); rectificationMatrix1 = new Mat(rectificationMatrix1Ptr); rectificationMatrix2 = new Mat(rectificationMatrix2Ptr); projectionMatrix1 = new Mat(projectionMatrix1Ptr); projectionMatrix2 = new Mat(projectionMatrix2Ptr); disparityMatrix = new Mat(disparityMatrixPtr); exception.Check(); } public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix, Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2, out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize, Rect validPixROI1) { Rect validPixROI2 = new Rect(); StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1, out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize, validPixROI1, validPixROI2); } public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix, Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2, out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize) { Rect validPixROI1 = new Rect(); StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1, out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize, validPixROI1); } public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix, Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2, out Mat disparityMatrix, StereoRectifyFlags flags = StereoRectifyFlags.ZeroDisparity, double scalingFactor = -1) { Size newImageSize = new Size(); StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1, out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize); } public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor, Size newImageSize, Rect validPixRoi, bool centerPrincipalPoint = false) { Exception exception = new Exception(); IntPtr newCameraMatrixPtr; newCameraMatrixPtr = au_cv_calib3d_getOptimalNewCameraMatrix(cameraMatrix.CppPtr, distCoeffs.CppPtr, imageSize.CppPtr, scalingFactor, newImageSize.CppPtr, validPixRoi.CppPtr, centerPrincipalPoint, exception.CppPtr); exception.Check(); return (newCameraMatrixPtr != IntPtr.Zero) ? new Mat(newCameraMatrixPtr) : null; } public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor, Size newImageSize) { Rect validPixROI = new Rect(); return GetOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, scalingFactor, newImageSize, validPixROI); } public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor) { Size newImageSize = imageSize; return GetOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, scalingFactor, newImageSize); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Calib3d.cs.meta ================================================ fileFormatVersion: 2 guid: 7b57a12c3ec3c7647830358c43f8a2a8 timeCreated: 1477514709 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Ccalib.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public static partial class Omnidir { // Enums public enum Calib { UseGuess = 1, FixSkew = 2, FixK1 = 4, FixK2 = 8, FixP1 = 16, FixP2 = 32, FixXi = 64, FixGamma = 128, FixCenter = 256, }; public enum Rectifify { Perspective = 1, Cylindrical = 2, Longlati = 3, Stereographic = 4 }; // Native functions [DllImport("ArucoUnityPlugin")] static extern double au_cv_ccalib_omnidir_calibrate(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize, IntPtr cameraMatrix, IntPtr xi, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags, IntPtr criteria, out IntPtr idx, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_ccalib_omnidir_initUndistortRectifyMap(IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr xi, IntPtr R, IntPtr newCameraMatrix, IntPtr size, int m1type, out IntPtr map1, out IntPtr map2, int flags, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern double au_cv_ccalib_omnidir_stereoCalibrate(IntPtr objectPoints, IntPtr imagePoints1, IntPtr imagePoints2, IntPtr imageSize1, IntPtr imageSize2, IntPtr cameraMatrix1, IntPtr xi1, IntPtr distCoeffs1, IntPtr cameraMatrix2, IntPtr xi2, IntPtr distCoeffs2, out IntPtr rvec, out IntPtr tvec, out IntPtr rvecsL, out IntPtr tvecsL, int flags, IntPtr criteria, out IntPtr idx, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_ccalib_omnidir_stereoRectify(IntPtr rvec, IntPtr tvec, out IntPtr R1, out IntPtr R2, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_ccalib_omnidir_undistortImage(IntPtr distorted, out IntPtr undistorted, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr xi, int flags, IntPtr newCameraMatrix, IntPtr newSize, IntPtr R, IntPtr exception); // Static methods public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria, out Mat idx) { Exception exception = new Exception(); IntPtr rvecsPtr, tvecsPtr, idxPtr; double error = au_cv_ccalib_omnidir_calibrate(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr, xi.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, out idxPtr, exception.CppPtr); rvecs = new Std.VectorVec3d(rvecsPtr); tvecs = new Std.VectorVec3d(tvecsPtr); idx = new Mat(idxPtr); exception.Check(); return error; } public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria) { Mat idx; return Calibrate(objectPoints, imagePoints, imageSize, cameraMatrix, xi, distCoeffs, out rvecs, out tvecs, flags, criteria, out idx); } public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags) { TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 200, EPSILON); return Calibrate(objectPoints, imagePoints, imageSize, cameraMatrix, xi, distCoeffs, out rvecs, out tvecs, flags, criteria); } public static void InitUndistortRectifyMap(Mat cameraMatrix, Mat distCoeffs, Mat xi, Mat R, Mat newCameraMatrix, Size size, Type m1type, out Mat map1, out Mat map2, Rectifify flags) { Exception exception = new Exception(); IntPtr map1Ptr, map2Ptr; au_cv_ccalib_omnidir_initUndistortRectifyMap(cameraMatrix.CppPtr, distCoeffs.CppPtr, xi.CppPtr, R.CppPtr, newCameraMatrix.CppPtr, size.CppPtr, (int)m1type, out map1Ptr, out map2Ptr, (int)flags, exception.CppPtr); map1 = new Mat(map1Ptr); map2 = new Mat(map2Ptr); exception.Check(); } public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1, Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2, Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags, TermCriteria criteria, out Mat idx) { Exception exception = new Exception(); IntPtr rvecPtr, tvecPtr, rvecsLPtr, tvecsLPtr, idxPtr; double error = au_cv_ccalib_omnidir_stereoCalibrate(objectPoints.CppPtr, imagePoints1.CppPtr, imagePoints2.CppPtr, imageSize1.CppPtr, imageSize2.CppPtr, cameraMatrix1.CppPtr, xi1.CppPtr, distCoeffs1.CppPtr, cameraMatrix2.CppPtr, xi2.CppPtr, distCoeffs2.CppPtr, out rvecPtr, out tvecPtr, out rvecsLPtr, out tvecsLPtr, (int)flags, criteria.CppPtr, out idxPtr, exception.CppPtr); rvec = new Vec3d(rvecPtr); tvec = new Vec3d(tvecPtr); rvecsL = new Std.VectorVec3d(rvecsLPtr); tvecsL = new Std.VectorVec3d(tvecsLPtr); idx = new Mat(idxPtr); exception.Check(); return error; } public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1, Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2, Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags, TermCriteria criteria) { Mat idx; return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize1, imageSize2, cameraMatrix1, xi1, distCoeffs1, cameraMatrix2, xi2, distCoeffs2, out rvec, out tvec, out rvecsL, out tvecsL, flags, criteria, out idx); } public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1, Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2, Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags) { TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 200, EPSILON); return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize1, imageSize2, cameraMatrix1, xi1, distCoeffs1, cameraMatrix2, xi2, distCoeffs2, out rvec, out tvec, out rvecsL, out tvecsL, flags, criteria); } public static void StereoRectify(Vec3d rvec, Vec3d tvec, out Mat R1, out Mat R2) { Exception exception = new Exception(); IntPtr R1Ptr, R2Ptr; au_cv_ccalib_omnidir_stereoRectify(rvec.CppPtr, tvec.CppPtr, out R1Ptr, out R2Ptr, exception.CppPtr); R1 = new Mat(R1Ptr); R2 = new Mat(R2Ptr); exception.Check(); } public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags, Mat newCameraMatrix, Size newSize, Mat R) { Exception exception = new Exception(); IntPtr undistortedPtr; au_cv_ccalib_omnidir_undistortImage(distorted.CppPtr, out undistortedPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, xi.CppPtr, (int)flags, newCameraMatrix.CppPtr, newSize.CppPtr, R.CppPtr, exception.CppPtr); undistorted = new Mat(undistortedPtr); exception.Check(); } public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags, Mat newCameraMatrix, Size newSize) { Mat R = new Mat(3, 3, Type.CV_64F, new double[9] { 1, 0, 0, 0, 1, 0, 0, 0, 1 }); UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, newCameraMatrix, newSize, R); } public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags, Mat newCameraMatrix) { Size newSize = new Size(); UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, newCameraMatrix, newSize); } public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags) { UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, cameraMatrix); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Ccalib.cs.meta ================================================ fileFormatVersion: 2 guid: cc736cee2ab42454e94628875b1c4671 timeCreated: 1493162376 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Core.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { // Constants public const int CN_SHIFT = 3; public const int DEPTH_MAX = 1 << CN_SHIFT; public const int MAT_DEPTH_MAX = DEPTH_MAX - 1; public const double EPSILON = 2.2204460492503131e-016; public const int horizontalFlipCode = 1; public const int verticalFlipCode = 0; public const int bothAxesFlipCode = -1; // Enums public enum Type { CV_8U = 0, CV_8UC1 = (CV_8U & MAT_DEPTH_MAX) + (0 << CN_SHIFT), CV_8UC2 = (CV_8U & MAT_DEPTH_MAX) + (1 << CN_SHIFT), CV_8UC3 = (CV_8U & MAT_DEPTH_MAX) + (2 << CN_SHIFT), CV_8UC4 = (CV_8U & MAT_DEPTH_MAX) + (3 << CN_SHIFT), CV_16S = 3, CV_16SC1 = (CV_16S & MAT_DEPTH_MAX) + (0 << CN_SHIFT), CV_16SC2 = (CV_16S & MAT_DEPTH_MAX) + (1 << CN_SHIFT), CV_16SC3 = (CV_16S & MAT_DEPTH_MAX) + (2 << CN_SHIFT), CV_16SC4 = (CV_16S & MAT_DEPTH_MAX) + (3 << CN_SHIFT), CV_64F = 6, CV_64FC1 = (CV_64F & MAT_DEPTH_MAX) + (0 << CN_SHIFT), CV_64FC2 = (CV_64F & MAT_DEPTH_MAX) + (1 << CN_SHIFT), CV_64FC3 = (CV_64F & MAT_DEPTH_MAX) + (2 << CN_SHIFT), CV_64FC4 = (CV_64F & MAT_DEPTH_MAX) + (3 << CN_SHIFT), }; // Native functions [DllImport("ArucoUnityPlugin")] static extern void au_cv_core_flip(IntPtr src, IntPtr dst, int flipCode, IntPtr exception); // Static methods public static void Flip(Mat src, Mat dst, int flipCode) { Exception exception = new Exception(); au_cv_core_flip(src.CppPtr, dst.CppPtr, flipCode, exception.CppPtr); exception.Check(); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Core.cs.meta ================================================ fileFormatVersion: 2 guid: 8171f90e207e55a47a9b8c736588b731 timeCreated: 1490206055 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Exception.cs ================================================ using System; using System.Runtime.InteropServices; using System.Text; namespace ArucoUnity.Plugin { public static partial class Cv { public class Exception : HandleCppPtr { // Constants private const int WhatLength = 1024; // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Exception_new(); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Exception_delete(IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Exception_what(IntPtr exception, StringBuilder sb, int sbLength); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Exception_getCode(IntPtr exception); // Variables private StringBuilder sb; // Constructor & Destructor public Exception() : base(au_cv_Exception_new()) { sb = new StringBuilder(WhatLength); } protected override void DeleteCppPtr() { //au_cv_Exception_delete(cvPtr); // TODO: fix } // Properties public int Code { get { return au_cv_Exception_getCode(CppPtr); } } // Methods public string What() { au_cv_Exception_what(CppPtr, sb, WhatLength); return sb.ToString(); } public void Check() { if (Code != 0) { throw new System.Exception(What()); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Exception.cs.meta ================================================ fileFormatVersion: 2 guid: d6b41ba830f01004082572a07799015d timeCreated: 1475010512 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Imgproc.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { // Enums /// /// See the OpenCV documentation for more information: /// http://docs.opencv.org/3.2.0/d2/de8/group__core__array.html#ga209f2f4869e304c82d07739337eae7c5 /// public enum BorderTypes { Constant = 0, /// `iiiiii|abcdefgh|iiiiiii` with some specified `i` Replicate = 1, /// `aaaaaa|abcdefgh|hhhhhhh` Reflect = 2, /// `fedcba|abcdefgh|hgfedcb` Wrap = 3, /// `cdefgh|abcdefgh|abcdefg` Reflect101 = 4, /// `gfedcb|abcdefgh|gfedcba` Transparent = 5, /// `uvwxyz|absdefgh|ijklmno` Default = Reflect101, /// Same as BORDER_REFLECT_101. Isolated = 16 /// Do not look outside of ROI. } /// /// See the OpenCV documentation for more information: /// http://docs.opencv.org/3.2.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121ac97d8e4880d8b5d509e96825c7522deb /// public enum InterpolationFlags { Nearest = 0, /// Nearest neighbor interpolation. Linear = 1, /// Bilinear interpolation. Cubic = 2, /// Bicubic interpolation. Area = 3, /// Resampling using pixel area relation. Lanczos4 = 4, /// Lanczos interpolation over 8x8 neighborhood. Max = 7, /// Mask for interpolation codes. WarpFillOutliers = 8, /// Fills all of the destination image pixels. WarpInverseMap = 16 /// Inverse transformation. } // Native functions [DllImport("ArucoUnityPlugin")] static extern void au_cv_imgproc_initUndistortRectifyMap(IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr R, IntPtr newCameraMatrix, IntPtr size, int m1type, out IntPtr map1, out IntPtr map2, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_imgproc_remap(IntPtr src, IntPtr dst, IntPtr map1, IntPtr map2, int interpolation, int borderType, IntPtr borderValue, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_imgproc_undistort(IntPtr rotationVector, out IntPtr rotationMatrix, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr newCameraMatrix, IntPtr exception); // Methods public static void InitUndistortRectifyMap(Mat cameraMatrix, Mat distCoeffs, Mat R, Mat newCameraMatrix, Size size, Type m1type, out Mat map1, out Mat map2) { Exception exception = new Exception(); IntPtr map1Ptr, map2Ptr; au_cv_imgproc_initUndistortRectifyMap(cameraMatrix.CppPtr, distCoeffs.CppPtr, R.CppPtr, newCameraMatrix.CppPtr, size.CppPtr, (int)m1type, out map1Ptr, out map2Ptr, exception.CppPtr); map1 = new Mat(map1Ptr); map2 = new Mat(map2Ptr); exception.Check(); } public static void Remap(Mat src, Mat dst, Mat map1, Mat map2, InterpolationFlags interpolation, BorderTypes borderType, Scalar borderValue) { Exception exception = new Exception(); au_cv_imgproc_remap(src.CppPtr, dst.CppPtr, map1.CppPtr, map2.CppPtr, (int)interpolation, (int)borderType, borderValue.CppPtr, exception.CppPtr); exception.Check(); } public static void Remap(Mat src, Mat dst, Mat map1, Mat map2, InterpolationFlags interpolation, BorderTypes borderType = BorderTypes.Constant) { Scalar borderValue = new Scalar(0, 0, 0); Remap(src, dst, map1, map2, interpolation, borderType, borderValue); } public static void Undistort(Mat inputImage, out Mat outputImage, Mat cameraMatrix, Mat distCoeffs, Mat newCameraMatrix) { Exception exception = new Exception(); IntPtr outputImagePtr; au_cv_imgproc_undistort(inputImage.CppPtr, out outputImagePtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, newCameraMatrix.CppPtr, exception.CppPtr); outputImage = new Mat(outputImagePtr); exception.Check(); } public static void Undistort(Mat inputImage, out Mat outputImage, Mat cameraMatrix, Mat distCoeffs) { Mat newCameraMatrix = new Mat(); Undistort(inputImage, out outputImage, cameraMatrix, distCoeffs, newCameraMatrix); } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Imgproc.cs.meta ================================================ fileFormatVersion: 2 guid: 8836f295d6d4c65429ae7939ed5608fd timeCreated: 1484166017 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Mat.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public class Mat : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_new1(); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_new2(int rows, int cols, int type); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_new3(IntPtr size, int type); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_new8_uchar(int rows, int cols, int type, byte[] data); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_new8_double(int rows, int cols, int type, double[] data); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_delete(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Mat_at_int_get(IntPtr mat, int i0, int i1, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_at_int_set(IntPtr mat, int i0, int i1, int value, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern double au_cv_Mat_at_double_get(IntPtr mat, int i0, int i1, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_at_double_set(IntPtr mat, int i0, int i1, double value, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Mat_channels(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_clone(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_create(IntPtr mat, int rows, int cols, int type, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern uint au_cv_Mat_total(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Mat_type(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern uint au_cv_Mat_elemSize(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern uint au_cv_Mat_elemSize1(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Mat_getCols(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_getData_void(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_setData_void(IntPtr mat, IntPtr data); [DllImport("ArucoUnityPlugin")] static extern byte[] au_cv_Mat_getData_uchar(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Mat_setData_uchar(IntPtr mat, byte[] data); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Mat_getRows(IntPtr mat); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Mat_getSize(IntPtr mat); // Constructors & destructor public Mat() : base(au_cv_Mat_new1()) { } public Mat(int rows, int cols, Type type) : base(au_cv_Mat_new2(rows, cols, (int)type)) { } public Mat(Size size, Type type) : base(au_cv_Mat_new3(size.CppPtr, (int)type)) { } public Mat(int rows, int cols, Type type, byte[] data) : base(au_cv_Mat_new8_uchar(rows, cols, (int)type, data)) { } public Mat(int rows, int cols, Type type, double[] data) : base(au_cv_Mat_new8_double(rows, cols, (int)type, data)) { } internal Mat(IntPtr matPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(matPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_cv_Mat_delete(CppPtr); } // Properties public int Cols { get { return au_cv_Mat_getCols(CppPtr); } } public IntPtr DataIntPtr { get { return au_cv_Mat_getData_void(CppPtr); } set { au_cv_Mat_setData_void(CppPtr, value); } } public byte[] DataByte { get { return au_cv_Mat_getData_uchar(CppPtr); } set { au_cv_Mat_setData_uchar(CppPtr, value); } } public int Rows { get { return au_cv_Mat_getRows(CppPtr); } } public Size Size { get { return new Size(au_cv_Mat_getSize(CppPtr)); } } // Methods public int Channels() { return au_cv_Mat_channels(CppPtr); } public Mat Clone() { return new Mat(au_cv_Mat_clone(CppPtr)); } public void Create(int rows, int cols, Type type) { Exception exception = new Exception(); au_cv_Mat_create(CppPtr, rows, cols, (int)type, exception.CppPtr); exception.Check(); } public int AtInt(int i0, int i1) { Exception exception = new Exception(); int value = au_cv_Mat_at_int_get(CppPtr, i0, i1, exception.CppPtr); exception.Check(); return value; } public void AtInt(int i0, int i1, int value) { Exception exception = new Exception(); au_cv_Mat_at_int_set(CppPtr, i0, i1, value, exception.CppPtr); exception.Check(); } public double AtDouble(int i0, int i1) { Exception exception = new Exception(); double value = au_cv_Mat_at_double_get(CppPtr, i0, i1, exception.CppPtr); exception.Check(); return value; } public void AtDouble(int i0, int i1, double value) { Exception exception = new Exception(); au_cv_Mat_at_double_set(CppPtr, i0, i1, value, exception.CppPtr); exception.Check(); } public uint ElemSize() { return au_cv_Mat_elemSize(CppPtr); } public uint ElemSize1() { return au_cv_Mat_elemSize1(CppPtr); } public uint Total() { return au_cv_Mat_total(CppPtr); } public Type Type() { return (Type)au_cv_Mat_type(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Mat.cs.meta ================================================ fileFormatVersion: 2 guid: 1b2dfb39b25b1f74daa38ba5620d9b46 timeCreated: 1473799894 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Point2f.cs ================================================ using System; using System.Runtime.InteropServices; using UnityEngine; namespace ArucoUnity.Plugin { public static partial class Cv { public class Point2f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Point2f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point2f_delete(IntPtr point2f); [DllImport("ArucoUnityPlugin")] static extern float au_cv_Point2f_getX(IntPtr point2f); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point2f_setX(IntPtr point2f, float x); [DllImport("ArucoUnityPlugin")] static extern float au_cv_Point2f_getY(IntPtr point2f); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point2f_setY(IntPtr point2f, float y); // Constructors & destructor public Point2f() : base(au_cv_Point2f_new()) { } public Point2f(IntPtr point2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(point2fPtr, deleteResponsibility) { } public static implicit operator Vector2(Point2f point2f) { return new Vector2(point2f.X, point2f.Y); } public static implicit operator Vector3(Point2f point2f) { return new Vector3(point2f.X, point2f.Y, 0); } protected override void DeleteCppPtr() { au_cv_Point2f_delete(CppPtr); } // Properties public float X { get { return au_cv_Point2f_getX(CppPtr); } set { au_cv_Point2f_setX(CppPtr, value); } } public float Y { get { return au_cv_Point2f_getY(CppPtr); } set { au_cv_Point2f_setY(CppPtr, value); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Point2f.cs.meta ================================================ fileFormatVersion: 2 guid: 0990a30a6e3e33f45bf62e674f99ecd9 timeCreated: 1475185641 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Point3f.cs ================================================ using System; using System.Runtime.InteropServices; using UnityEngine; namespace ArucoUnity.Plugin { public static partial class Cv { public class Point3f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Point3f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point3f_delete(IntPtr point3f); [DllImport("ArucoUnityPlugin")] static extern float au_cv_Point3f_getX(IntPtr point3f); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point3f_setX(IntPtr point3f, float x); [DllImport("ArucoUnityPlugin")] static extern float au_cv_Point3f_getY(IntPtr point3f); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point3f_setY(IntPtr point3f, float y); [DllImport("ArucoUnityPlugin")] static extern float au_cv_Point3f_getZ(IntPtr point3f); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Point3f_setZ(IntPtr point3f, float z); // Constructors & destructor public Point3f() : base(au_cv_Point3f_new()) { } public Point3f(IntPtr point3fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(point3fPtr, deleteResponsibility) { } public static implicit operator Vector3(Point3f point3f) { return new Vector3(point3f.X, point3f.Y, point3f.Z); } protected override void DeleteCppPtr() { au_cv_Point3f_delete(CppPtr); } // Properties public float X { get { return au_cv_Point3f_getX(CppPtr); } set { au_cv_Point3f_setX(CppPtr, value); } } public float Y { get { return au_cv_Point3f_getY(CppPtr); } set { au_cv_Point3f_setY(CppPtr, value); } } public float Z { get { return au_cv_Point3f_getZ(CppPtr); } set { au_cv_Point3f_setZ(CppPtr, value); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Point3f.cs.meta ================================================ fileFormatVersion: 2 guid: 847ac7c13477a3b4387f5c2b57bef4d1 timeCreated: 1476143477 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Rect.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public class Rect : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Rect_new1(); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Rect_new2(int x, int y, int width, int height); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Rect_delete(IntPtr Rect); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Rect_getX(IntPtr Rect); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Rect_setX(IntPtr Rect, int x); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Rect_getY(IntPtr Rect); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Rect_setY(IntPtr Rect, int y); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Rect_getWidth(IntPtr Rect); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Rect_setWidth(IntPtr Rect, int width); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Rect_getHeight(IntPtr Rect); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Rect_setHeight(IntPtr Rect, int height); // Constructors & destructor public Rect() : base(au_cv_Rect_new1()) { } public Rect(int x, int y, int width, int height) : base(au_cv_Rect_new2(x, y, width, height)) { } public Rect(IntPtr RectPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(RectPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_cv_Rect_delete(CppPtr); } // Properties public int X { get { return au_cv_Rect_getX(CppPtr); } set { au_cv_Rect_setX(CppPtr, value); } } public int Y { get { return au_cv_Rect_getY(CppPtr); } set { au_cv_Rect_setY(CppPtr, value); } } public int Width { get { return au_cv_Rect_getWidth(CppPtr); } set { au_cv_Rect_setWidth(CppPtr, value); } } public int Height { get { return au_cv_Rect_getHeight(CppPtr); } set { au_cv_Rect_setHeight(CppPtr, value); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Rect.cs.meta ================================================ fileFormatVersion: 2 guid: d9d4333436970994b9c644933ff87f83 timeCreated: 1490979343 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Scalar.cs ================================================ using System; using System.Runtime.InteropServices; using UnityEngine; namespace ArucoUnity.Plugin { public static partial class Cv { public class Scalar : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Scalar_new(double v0, double v1, double v2); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Scalar_delete(IntPtr scalar); // Constructors & destructor public Scalar(double v0, double v1, double v2) : base(au_cv_Scalar_new(v0, v1, v2)) { } public static implicit operator Scalar(Color color) { return new Scalar(color.r, color.g, color.b); } protected override void DeleteCppPtr() { au_cv_Scalar_delete(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Scalar.cs.meta ================================================ fileFormatVersion: 2 guid: f06d1d8bdcab1d34ca216c5addeb1e62 timeCreated: 1475871810 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Size.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public class Size : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Size_new1(); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Size_new2(int width, int height); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Size_delete(IntPtr size); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Size_area(IntPtr size); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Size_getHeight(IntPtr size); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Size_setHeight(IntPtr size, int height); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Size_getWidth(IntPtr size); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Size_setWidth(IntPtr size, int width); // Constructors & destructor public Size() : base(au_cv_Size_new1()) { } public Size(int width, int height) : base(au_cv_Size_new2(width, height)) { } public Size(IntPtr sizePtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(sizePtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_cv_Size_delete(CppPtr); } // Properties public int Height { get { return au_cv_Size_getHeight(CppPtr); } set { au_cv_Size_setHeight(CppPtr, value); } } public int Width { get { return au_cv_Size_getWidth(CppPtr); } set { au_cv_Size_setWidth(CppPtr, value); } } // Methods public int Area() { return au_cv_Size_area(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Size.cs.meta ================================================ fileFormatVersion: 2 guid: b64a74fd00c3be54bb19a2265f81d5b5 timeCreated: 1476154441 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/TermCriteria.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public class TermCriteria : HandleCppPtr { // Enums public enum Type { Count = 0, MaxIter = Count, Eps = 2 } // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_TermCriteria_new1(); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_TermCriteria_new2(int type, int maxCount, double epsilon); [DllImport("ArucoUnityPlugin")] static extern void au_cv_TermCriteria_delete(IntPtr termCriteria); [DllImport("ArucoUnityPlugin")] static extern double au_cv_TermCriteria_getEpsilon(IntPtr termCriteria); [DllImport("ArucoUnityPlugin")] static extern void au_cv_TermCriteria_setEpsilon(IntPtr termCriteria, double epsilon); [DllImport("ArucoUnityPlugin")] static extern int au_cv_TermCriteria_getMaxCount(IntPtr termCriteria); [DllImport("ArucoUnityPlugin")] static extern void au_cv_TermCriteria_setMaxCount(IntPtr termCriteria, int maxCount); [DllImport("ArucoUnityPlugin")] static extern int au_cv_TermCriteria_getType(IntPtr termCriteria); [DllImport("ArucoUnityPlugin")] static extern void au_cv_TermCriteria_setType(IntPtr termCriteria, int type); // Constructors & destructor public TermCriteria() : base(au_cv_TermCriteria_new1()) { } public TermCriteria(Type type, int maxCount, double epsilon) : base(au_cv_TermCriteria_new2((int)type, maxCount, epsilon)) { } protected override void DeleteCppPtr() { au_cv_TermCriteria_delete(CppPtr); } // Properties public double Epsilon { get { return au_cv_TermCriteria_getEpsilon(CppPtr); } set { au_cv_TermCriteria_setEpsilon(CppPtr, value); } } public int MaxCount { get { return au_cv_TermCriteria_getMaxCount(CppPtr); } set { au_cv_TermCriteria_setMaxCount(CppPtr, value); } } public int TypeValue { get { return au_cv_TermCriteria_getType(CppPtr); } set { au_cv_TermCriteria_setType(CppPtr, value); } } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/TermCriteria.cs.meta ================================================ fileFormatVersion: 2 guid: c31026d104464484abd47c8fb3d208c8 timeCreated: 1476243863 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Vec3d.cs ================================================ using System; using System.Runtime.InteropServices; using UnityEngine; namespace ArucoUnity.Plugin { public static partial class Cv { public class Vec3d : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Vec3d_new(double v0, double v1, double v2); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Vec3d_delete(IntPtr vec3d); [DllImport("ArucoUnityPlugin")] static extern double au_cv_Vec3d_get(IntPtr vec3d, int i, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Vec3d_set(IntPtr vec3d, int i, double value, IntPtr exception); // Constructors & destructor public Vec3d(double v0 = 0, double v1 = 0, double v2 = 0) : base(au_cv_Vec3d_new(v0, v1, v2)) { } public Vec3d(IntPtr vec3dPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vec3dPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_cv_Vec3d_delete(CppPtr); } // Methods public double Get(int i) { Exception exception = new Exception(); double value = au_cv_Vec3d_get(CppPtr, i, exception.CppPtr); exception.Check(); return value; } public void Set(int i, double value) { Exception exception = new Exception(); au_cv_Vec3d_set(CppPtr, i, value, exception.CppPtr); exception.Check(); } /// /// Converts the Vec3d as an OpenCV's translation vector to a Vector3. /// /// The converted vector. public Vector3 ToPosition() { return new Vector3((float)Get(0), -(float)Get(1), (float)Get(2)); // Convert the vector from left-handed to right-handed } /// /// Converts the Vec3d as an OpenCV's rotation vector to a Quaternion. /// Based on: http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/ /// /// The converted quaternion. public Quaternion ToRotation() { // Convert the vector from left-handed to right-handed Vector3 angleAxis = new Vector3((float)Get(0), -(float)Get(1), (float)Get(2)); Vector3 unitVector = angleAxis.normalized; float angle = -angleAxis.magnitude; // Convert from axis-angle to quaternion Quaternion rotation; float sinHalfAngle = Mathf.Sin(angle / 2); rotation.x = unitVector.x * sinHalfAngle; rotation.y = unitVector.y * sinHalfAngle; rotation.z = unitVector.z * sinHalfAngle; rotation.w = Mathf.Cos(angle / 2); // Re-orient to put the y axis up rotation *= Quaternion.Euler(90f, 0f, 0f); return rotation; } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Vec3d.cs.meta ================================================ fileFormatVersion: 2 guid: 5fca78d7a7953224b9ad3a40ee5d72c9 timeCreated: 1477513240 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Vec4i.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Cv { public class Vec4i : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_cv_Vec4i_new(); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Vec4i_delete(IntPtr vec4i); [DllImport("ArucoUnityPlugin")] static extern int au_cv_Vec4i_get(IntPtr vec4i, int i, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern void au_cv_Vec4i_set(IntPtr vec4i, int i, int value, IntPtr exception); // Constructors & destructor public Vec4i() : base(au_cv_Vec4i_new()) { } public Vec4i(IntPtr vec4iPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vec4iPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_cv_Vec4i_delete(CppPtr); } // Methods public int Get(int i) { Exception exception = new Exception(); int value = au_cv_Vec4i_get(CppPtr, i, exception.CppPtr); exception.Check(); return value; } public void Set(int i, int value) { Exception exception = new Exception(); au_cv_Vec4i_set(CppPtr, i, value, exception.CppPtr); exception.Check(); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv/Vec4i.cs.meta ================================================ fileFormatVersion: 2 guid: dc04c145ff0d6bb4e8c196b47ff9827d timeCreated: 1476731429 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Cv.meta ================================================ fileFormatVersion: 2 guid: e8851f331b599e94c8ee7169d66e4cb6 folderAsset: yes timeCreated: 1484338982 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/HandleCppPtr.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public enum DeleteResponsibility { True, False } public abstract class HandleCppPtr { // Constructors & destructor public HandleCppPtr(DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) { CppPtr = IntPtr.Zero; DeleteResponsibility = deleteResponsibility; } public HandleCppPtr(IntPtr cppPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) { CppPtr = cppPtr; DeleteResponsibility = deleteResponsibility; } ~HandleCppPtr() { if (DeleteResponsibility == DeleteResponsibility.True) { DeleteCppPtr(); } } // Properties public DeleteResponsibility DeleteResponsibility { get; set; } public IntPtr CppPtr { get { return handle.Handle; } set { handle = new HandleRef(this, value); } } // Variables HandleRef handle; // Methods protected abstract void DeleteCppPtr(); } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/HandleCppPtr.cs.meta ================================================ fileFormatVersion: 2 guid: 73ee605a10ec8294283381049ef23538 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorDouble.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorDouble : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorDouble_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorDouble_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern int au_std_vectorDouble_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe double* au_std_vectorDouble_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorDouble_push_back(IntPtr vector, double value); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorDouble_reserve(IntPtr vector, uint new_cap, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorDouble_size(IntPtr vector); // Constructors & destructor public VectorDouble() : base(au_std_vectorDouble_new()) { } public VectorDouble(IntPtr vectorDoublePtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorDoublePtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorDouble_delete(CppPtr); } // Methods public double At(uint pos) { Cv.Exception exception = new Cv.Exception(); double element = au_std_vectorDouble_at(CppPtr, pos, exception.CppPtr); exception.Check(); return element; } public unsafe double[] Data() { double* dataPtr = au_std_vectorDouble_data(CppPtr); uint size = Size(); double[] data = new double[size]; for (int i = 0; i < size; i++) { data[i] = dataPtr[i]; } return data; } public void PushBack(double value) { au_std_vectorDouble_push_back(CppPtr, value); } public void Reserve(uint newCap) { Cv.Exception exception = new Cv.Exception(); au_std_vectorDouble_reserve(CppPtr, newCap, exception.CppPtr); exception.Check(); } public uint Size() { return au_std_vectorDouble_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorDouble.cs.meta ================================================ fileFormatVersion: 2 guid: 176d1893582b60e4584cdd13bb187474 timeCreated: 1490986450 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorInt.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorInt : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorInt_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorInt_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern int au_std_vectorInt_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe int* au_std_vectorInt_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorInt_push_back(IntPtr vector, int value); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorInt_reserve(IntPtr vector, uint new_cap, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorInt_size(IntPtr vector); // Constructors & destructor public VectorInt() : base(au_std_vectorInt_new()) { } public VectorInt(IntPtr vectorIntPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorIntPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorInt_delete(CppPtr); } // Methods public int At(uint pos) { Cv.Exception exception = new Cv.Exception(); int element = au_std_vectorInt_at(CppPtr, pos, exception.CppPtr); exception.Check(); return element; } public unsafe int[] Data() { int* dataPtr = au_std_vectorInt_data(CppPtr); uint size = Size(); int[] data = new int[size]; for (int i = 0; i < size; i++) { data[i] = dataPtr[i]; } return data; } public void PushBack(int value) { au_std_vectorInt_push_back(CppPtr, value); } public void Reserve(uint newCap) { Cv.Exception exception = new Cv.Exception(); au_std_vectorInt_reserve(CppPtr, newCap, exception.CppPtr); exception.Check(); } public uint Size() { return au_std_vectorInt_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorInt.cs.meta ================================================ fileFormatVersion: 2 guid: f13417444cd376b41a7af347fbfaad74 timeCreated: 1475528492 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorMat.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorMat : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorMat_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorMat_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorMat_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorMat_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorMat_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorMat_size(IntPtr vector); // Constructors & destructor public VectorMat() : base(au_std_vectorMat_new()) { } public VectorMat(IntPtr vectorMatPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorMatPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorMat_delete(CppPtr); } // Methods public Cv.Mat At(uint pos) { Cv.Exception exception = new Cv.Exception(); Cv.Mat element = new Cv.Mat(au_std_vectorMat_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe Cv.Mat[] Data() { IntPtr* dataPtr = au_std_vectorMat_data(CppPtr); uint size = Size(); Cv.Mat[] data = new Cv.Mat[size]; for (int i = 0; i < size; i++) { data[i] = new Cv.Mat(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(Cv.Mat value) { au_std_vectorMat_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorMat_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorMat.cs.meta ================================================ fileFormatVersion: 2 guid: 693fa64560a3b6b42a4dd030b052c482 timeCreated: 1476240973 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint2f.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorPoint2f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorPoint2f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorPoint2f_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorPoint2f_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorPoint2f_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorPoint2f_size(IntPtr vector); // Constructors & destructor public VectorPoint2f() : base(au_std_vectorPoint2f_new()) { } public VectorPoint2f(IntPtr vectorPoint2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorPoint2fPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorPoint2f_delete(CppPtr); } // Methods public Cv.Point2f At(uint pos) { Cv.Exception exception = new Cv.Exception(); Cv.Point2f element = new Cv.Point2f(au_std_vectorPoint2f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe Cv.Point2f[] Data() { IntPtr* dataPtr = au_std_vectorPoint2f_data(CppPtr); uint size = Size(); Cv.Point2f[] data = new Cv.Point2f[size]; for (int i = 0; i < size; i++) { data[i] = new Cv.Point2f(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(Cv.Point2f value) { au_std_vectorPoint2f_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorPoint2f_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint2f.cs.meta ================================================ fileFormatVersion: 2 guid: 3f0d1b8cc426b8f438aaf3e27911fb30 timeCreated: 1476292879 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint3f.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorPoint3f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorPoint3f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorPoint3f_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorPoint3f_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorPoint3f_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorPoint3f_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorPoint3f_size(IntPtr vector); // Constructors & destructor public VectorPoint3f() : base(au_std_vectorPoint3f_new()) { } public VectorPoint3f(IntPtr vectorPoint3fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorPoint3fPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorPoint3f_delete(CppPtr); } // Methods public Cv.Point3f At(uint pos) { Cv.Exception exception = new Cv.Exception(); Cv.Point3f element = new Cv.Point3f(au_std_vectorPoint3f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe Cv.Point3f[] Data() { IntPtr* dataPtr = au_std_vectorPoint3f_data(CppPtr); uint size = Size(); Cv.Point3f[] data = new Cv.Point3f[size]; for (int i = 0; i < size; i++) { data[i] = new Cv.Point3f(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(Cv.Point3f value) { au_std_vectorPoint3f_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorPoint3f_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint3f.cs.meta ================================================ fileFormatVersion: 2 guid: 65cc52ffe2abee54f87f94ddf569fac5 timeCreated: 1476293081 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec3d.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVec3d : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVec3d_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVec3d_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVec3d_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVec3d_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVec3d_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVec3d_size(IntPtr vector); // Constructors & destructor public VectorVec3d() : base(au_std_vectorVec3d_new()) { } public VectorVec3d(IntPtr vectorVec3dPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVec3dPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVec3d_delete(CppPtr); } // Methods public Cv.Vec3d At(uint pos) { Cv.Exception exception = new Cv.Exception(); Cv.Vec3d element = new Cv.Vec3d(au_std_vectorVec3d_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe Cv.Vec3d[] Data() { IntPtr* dataPtr = au_std_vectorVec3d_data(CppPtr); uint size = Size(); Cv.Vec3d[] data = new Cv.Vec3d[size]; for (int i = 0; i < size; i++) { data[i] = new Cv.Vec3d(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(Cv.Vec3d value) { au_std_vectorVec3d_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVec3d_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec3d.cs.meta ================================================ fileFormatVersion: 2 guid: 6789dfec4047b3a4a85f238c58d3a1d6 timeCreated: 1477513240 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec4i.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVec4i : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVec4i_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVec4i_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVec4i_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVec4i_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVec4i_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVec4i_size(IntPtr vector); // Constructors & destructor public VectorVec4i() : base(au_std_vectorVec4i_new()) { } public VectorVec4i(IntPtr vectorVec4iPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVec4iPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVec4i_delete(CppPtr); } // Methods public Cv.Vec4i At(uint pos) { Cv.Exception exception = new Cv.Exception(); Cv.Vec4i element = new Cv.Vec4i(au_std_vectorVec4i_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe Cv.Vec4i[] Data() { IntPtr* dataPtr = au_std_vectorVec4i_data(CppPtr); uint size = Size(); Cv.Vec4i[] data = new Cv.Vec4i[size]; for (int i = 0; i < size; i++) { data[i] = new Cv.Vec4i(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(Cv.Vec4i value) { au_std_vectorVec4i_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVec4i_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec4i.cs.meta ================================================ fileFormatVersion: 2 guid: 1e8a0d903b54ab4449dd5aad0fc76aae timeCreated: 1476735900 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorInt.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVectorInt : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorInt_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorInt_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorInt_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVectorInt_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorInt_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVectorInt_size(IntPtr vector); // Constructors & destructor public VectorVectorInt() : base(au_std_vectorVectorInt_new()) { } public VectorVectorInt(IntPtr vectorVectorIntPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVectorIntPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVectorInt_delete(CppPtr); } // Methods public VectorInt At(uint pos) { Cv.Exception exception = new Cv.Exception(); VectorInt element = new VectorInt(au_std_vectorVectorInt_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe VectorInt[] Data() { IntPtr* dataPtr = au_std_vectorVectorInt_data(CppPtr); uint size = Size(); VectorInt[] data = new VectorInt[size]; for (int i = 0; i < size; i++) { data[i] = new VectorInt(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(VectorInt value) { au_std_vectorVectorInt_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVectorInt_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorInt.cs.meta ================================================ fileFormatVersion: 2 guid: df24ba53523991b4bb93f61bff66f910 timeCreated: 1476293081 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint2f.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVectorPoint2f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorPoint2f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorPoint2f_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVectorPoint2f_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorPoint2f_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVectorPoint2f_size(IntPtr vector); // Constructors & destructor public VectorVectorPoint2f() : base(au_std_vectorVectorPoint2f_new()) { } public VectorVectorPoint2f(IntPtr vectorVectorPoint2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVectorPoint2fPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVectorPoint2f_delete(CppPtr); } // Methods public VectorPoint2f At(uint pos) { Cv.Exception exception = new Cv.Exception(); VectorPoint2f element = new VectorPoint2f(au_std_vectorVectorPoint2f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe VectorPoint2f[] Data() { IntPtr* dataPtr = au_std_vectorVectorPoint2f_data(CppPtr); uint size = Size(); VectorPoint2f[] data = new VectorPoint2f[size]; for (int i = 0; i < size; i++) { data[i] = new VectorPoint2f(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(VectorPoint2f value) { au_std_vectorVectorPoint2f_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVectorPoint2f_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint2f.cs.meta ================================================ fileFormatVersion: 2 guid: 372877bd69903b245a1722cba9bb96d8 timeCreated: 1475695635 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint3f.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVectorPoint3f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorPoint3f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorPoint3f_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorPoint3f_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVectorPoint3f_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorPoint3f_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVectorPoint3f_size(IntPtr vector); // Constructors & destructor public VectorVectorPoint3f() : base(au_std_vectorVectorPoint3f_new()) { } public VectorVectorPoint3f(IntPtr vectorVectorPoint3fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVectorPoint3fPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVectorPoint3f_delete(CppPtr); } // Methods public VectorPoint3f At(uint pos) { Cv.Exception exception = new Cv.Exception(); VectorPoint3f element = new VectorPoint3f(au_std_vectorVectorPoint3f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe VectorPoint3f[] Data() { IntPtr* dataPtr = au_std_vectorVectorPoint3f_data(CppPtr); uint size = Size(); VectorPoint3f[] data = new VectorPoint3f[size]; for (int i = 0; i < size; i++) { data[i] = new VectorPoint3f(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(VectorPoint3f value) { au_std_vectorVectorPoint3f_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVectorPoint3f_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint3f.cs.meta ================================================ fileFormatVersion: 2 guid: 0fa452cfe16fdd9448253f0e925d523d timeCreated: 1476143477 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorVectorPoint2f.cs ================================================ using System; using System.Runtime.InteropServices; namespace ArucoUnity.Plugin { public static partial class Std { public class VectorVectorVectorPoint2f : HandleCppPtr { // Native functions [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorVectorPoint2f_new(); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorVectorPoint2f_delete(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern IntPtr au_std_vectorVectorVectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception); [DllImport("ArucoUnityPlugin")] static extern unsafe IntPtr* au_std_vectorVectorVectorPoint2f_data(IntPtr vector); [DllImport("ArucoUnityPlugin")] static extern void au_std_vectorVectorVectorPoint2f_push_back(IntPtr vector, IntPtr value); [DllImport("ArucoUnityPlugin")] static extern uint au_std_vectorVectorVectorPoint2f_size(IntPtr vector); // Constructors & destructor public VectorVectorVectorPoint2f() : base(au_std_vectorVectorVectorPoint2f_new()) { } public VectorVectorVectorPoint2f(IntPtr vectorVectorVectorPoint2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True) : base(vectorVectorVectorPoint2fPtr, deleteResponsibility) { } protected override void DeleteCppPtr() { au_std_vectorVectorVectorPoint2f_delete(CppPtr); } // Methods public VectorVectorPoint2f At(uint pos) { Cv.Exception exception = new Cv.Exception(); VectorVectorPoint2f element = new VectorVectorPoint2f(au_std_vectorVectorVectorPoint2f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False); exception.Check(); return element; } public unsafe VectorVectorPoint2f[] Data() { IntPtr* dataPtr = au_std_vectorVectorVectorPoint2f_data(CppPtr); uint size = Size(); VectorVectorPoint2f[] data = new VectorVectorPoint2f[size]; for (int i = 0; i < size; i++) { data[i] = new VectorVectorPoint2f(dataPtr[i], DeleteResponsibility.False); } return data; } public void PushBack(VectorVectorPoint2f value) { au_std_vectorVectorVectorPoint2f_push_back(CppPtr, value.CppPtr); } public uint Size() { return au_std_vectorVectorVectorPoint2f_size(CppPtr); } } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorVectorPoint2f.cs.meta ================================================ fileFormatVersion: 2 guid: 43e1f4673e5d2cc48a18fdfdceb51bfc timeCreated: 1476294936 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins/Std.meta ================================================ fileFormatVersion: 2 guid: c2b80e746fc70a041ba131978ea2137b folderAsset: yes timeCreated: 1484338987 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Plugins.meta ================================================ fileFormatVersion: 2 guid: eaa29c1eae8e26c429c8fa321ad18c37 folderAsset: yes timeCreated: 1473370524 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/ArucoCameraSeparateThread.cs ================================================ using ArucoUnity.Cameras; using ArucoUnity.Plugin; using System; using System.Threading; namespace ArucoUnity.Utilities { public class ArucoCameraSeparateThread { private const int BuffersCount = 3; public ArucoCameraSeparateThread(IArucoCamera arucoCamera, Action threadWork) { this.arucoCamera = arucoCamera; this.threadWork = threadWork; CopyBackImages = false; for (int bufferId = 0; bufferId < BuffersCount; bufferId++) { imageBuffers[bufferId] = new Cv.Mat[arucoCamera.CameraNumber]; imageDataBuffers[bufferId] = new byte[arucoCamera.CameraNumber][]; for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { imageBuffers[bufferId][cameraId] = new Cv.Mat(arucoCamera.Textures[cameraId].height, arucoCamera.Textures[cameraId].width, CvMatExtensions.ImageType(arucoCamera.Textures[cameraId].format)); imageDataBuffers[bufferId][cameraId] = new byte[arucoCamera.ImageDataSizes[cameraId]]; imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId]; } } } public bool CopyBackImages { get; set; } public bool IsStarted { get; protected set; } public bool ImagesUpdated { get; protected set; } protected IArucoCamera arucoCamera; protected Action threadWork; protected uint currentBuffer = 0; protected Cv.Mat[][] imageBuffers = new Cv.Mat[BuffersCount][]; protected byte[][][] imageDataBuffers = new byte[BuffersCount][][]; protected Thread thread; protected Mutex mutex = new Mutex(); protected Exception threadException, exception; protected bool threadUpdated, imagesUpdated; public void Start() { IsStarted = true; ImagesUpdated = false; thread = new Thread(() => { try { while (IsStarted) { mutex.WaitOne(); { imagesUpdated = ImagesUpdated; } mutex.ReleaseMutex(); if (imagesUpdated) { threadWork(imageBuffers[currentBuffer]); mutex.WaitOne(); { currentBuffer = NextBuffer(); ImagesUpdated = false; } mutex.ReleaseMutex(); } } } catch (Exception e) { threadException = e; mutex.ReleaseMutex(); } }); thread.Start(); } public void Stop() { IsStarted = false; } /// /// Swaps the images with the copy used by the thread, and re-throw the thread exceptions. /// public void Update(byte[][] cameraImageDatas) { if (IsStarted) { mutex.WaitOne(); { exception = threadException; threadUpdated = !ImagesUpdated; } mutex.ReleaseMutex(); if (exception != null) { Stop(); throw exception; } else { if (threadUpdated) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { Array.Copy(cameraImageDatas[cameraId], imageDataBuffers[NextBuffer()][cameraId], arucoCamera.ImageDataSizes[cameraId]); } } if (CopyBackImages) { for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++) { Array.Copy(imageDataBuffers[PreviousBuffer()][cameraId], cameraImageDatas[cameraId], arucoCamera.ImageDataSizes[cameraId]); } } if (threadUpdated) { mutex.WaitOne(); { ImagesUpdated = true; } mutex.ReleaseMutex(); } } } } /// /// Returns the index of the next buffer. /// protected uint NextBuffer() { return (currentBuffer + 1) % BuffersCount; } /// /// Returns the index of the previous buffer. /// protected uint PreviousBuffer() { return (currentBuffer + BuffersCount - 1) % BuffersCount; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/ArucoCameraSeparateThread.cs.meta ================================================ fileFormatVersion: 2 guid: 8aea764e75f515b4fb34deb755945159 timeCreated: 1519160857 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/CvMatExtensions.cs ================================================ using ArucoUnity.Plugin; using System; using UnityEngine; namespace ArucoUnity.Utilities { /// /// Extensions methods for . /// public static class CvMatExtensions { /// /// Gets the camera focal lengths in a camera matrix, expressed in pixels units. Equals to /// F = (AtDouble(0, 0), AtDouble(1, 1)) /// public static Vector2 GetCameraFocalLengths(this Cv.Mat mat) { return new Vector2((float)mat.AtDouble(0, 0), (float)mat.AtDouble(1, 1)); } /// /// Gets the camera principal point in a camera matrix, expressed in pixels units. Equals to /// C = (AtDouble(0, 2), AtDouble(1, 2)) /// public static Vector2 GetCameraPrincipalPoint(this Cv.Mat mat) { return new Vector2((float)mat.AtDouble(0, 2), (float)mat.AtDouble(1, 2)); } /// /// Returns the OpenCV type equivalent to a texture format. /// /// The Unity texture format. /// The equivalent OpenCV type. public static Cv.Type ImageType(TextureFormat textureFormat) { Cv.Type type; switch (textureFormat) { case TextureFormat.RGB24: type = Cv.Type.CV_8UC3; break; case TextureFormat.BGRA32: case TextureFormat.ARGB32: case TextureFormat.RGBA32: type = Cv.Type.CV_8UC4; break; default: throw new ArgumentException("This type of texture is actually not supported: " + textureFormat + ".", "textureFormat"); } return type; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/CvMatExtensions.cs.meta ================================================ fileFormatVersion: 2 guid: 4c26a32bb6d84c24f98629918b51e169 timeCreated: 1510447995 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/WebcamController.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace ArucoUnity.Utilities { /// /// Get images from multiple webcams. /// /// /// Based on: http://answers.unity3d.com/answers/1155328/view.html /// public class WebcamController : MonoBehaviour { /// /// Called when the webcams started. /// public event Action Started = delegate { }; /// /// Gets the ids of the webcams to use. /// public List Ids { get; private set; } /// /// Gets the used webcams. /// public List Devices { get; private set; } /// /// Gets the textures of the used webcams. /// public List Textures { get; private set; } /// /// Gets converted in Texture2D. /// public List Textures2D { get { for (int cameraId = 0; cameraId < Textures.Count; cameraId++) { textures2D[cameraId].SetPixels32(Textures[cameraId].GetPixels32()); } return textures2D; } } /// /// Gets or sets the format of , by default . /// public TextureFormat Textures2DFormat { get { return textures2DFormat; } set { textures2DFormat = value; } } /// /// Gets if the controller is configured. /// public bool IsConfigured { get; private set; } /// /// Gets if the webcams started. /// public bool IsStarted { get; private set; } protected bool starting = false; private List textures2D = new List(); private TextureFormat textures2DFormat = TextureFormat.RGB24; /// /// Initializes the properties. /// protected void Awake() { IsStarted = false; IsConfigured = false; Ids = new List(); Devices = new List(); Textures = new List(); } /// /// Configures and from . /// public void Configure() { IsStarted = false; IsConfigured = true; Devices.Clear(); Textures.Clear(); Textures2D.Clear(); foreach (int webcamId in Ids) { var webcamDevice = WebCamTexture.devices[webcamId]; Devices.Add(webcamDevice); Textures.Add(new WebCamTexture(webcamDevice.name)); } } /// /// Starts the webcams. /// public void StartWebcams() { if (!IsConfigured || starting || IsStarted) { throw new Exception("Configure the controller, wait the webcams to start or stop the controller."); } StartCoroutine(StartingAsync()); } /// /// Stops the webcams. /// public void StopWebcams() { if (!IsConfigured || !IsStarted) { throw new Exception("Configure the controller and start the controller."); } IsStarted = false; if (starting) { StopCoroutine(StartingAsync()); } foreach (var webcam in Textures) { webcam.Stop(); } } /// /// Waits for Unity to start the webcams to set , and call /// . /// protected IEnumerator StartingAsync() { starting = true; foreach (var webcam in Textures) { webcam.Play(); } bool webcamsStarted; do { webcamsStarted = true; foreach (var texture in Textures) { webcamsStarted &= texture.width > 100; } if (webcamsStarted) { foreach (var webcam in Textures) { textures2D.Add(new Texture2D(webcam.width, webcam.height, Textures2DFormat, false)); } starting = false; IsStarted = true; Started(this); } else { yield return null; } } while (!webcamsStarted); starting = false; } } } ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities/WebcamController.cs.meta ================================================ fileFormatVersion: 2 guid: 1e86a6b70d7e2154a8a0f84a2ad36f6e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts/Utilities.meta ================================================ fileFormatVersion: 2 guid: d5a529f4a417c344dab6474f95677a06 folderAsset: yes timeCreated: 1493224889 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Scripts.meta ================================================ fileFormatVersion: 2 guid: 143c4d0c3aeb1c747a58682ae6469252 folderAsset: yes timeCreated: 1472228400 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Textures/BlackPixel.png.meta ================================================ fileFormatVersion: 2 guid: d263dba086ea0a8469cbf24719fc7002 timeCreated: 1511562096 licenseType: Free TextureImporter: fileIDToRecycleName: {} externalObjects: {} serializedVersion: 4 mipmaps: mipMapMode: 0 enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 mipMapsPreserveCoverage: 0 alphaTestReferenceValue: 0.5 mipMapFadeDistanceStart: 1 mipMapFadeDistanceEnd: 3 bumpmap: convertToNormalMap: 0 externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 seamlessCubemap: 0 textureFormat: 1 maxTextureSize: 2048 textureSettings: serializedVersion: 2 filterMode: -1 aniso: -1 mipBias: -1 wrapU: -1 wrapV: -1 wrapW: -1 nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaUsage: 1 alphaIsTransparency: 0 spriteTessellationDetail: -1 textureType: 0 textureShape: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 platformSettings: - buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] spritePackingTag: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity/Textures.meta ================================================ fileFormatVersion: 2 guid: 74b907760cd1c1c4eaf2333a3c020299 folderAsset: yes timeCreated: 1511562096 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/ArucoUnity.meta ================================================ fileFormatVersion: 2 guid: c17fe530e0452fa4689710a3f611192a folderAsset: yes timeCreated: 1472228400 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Editor/ExportArucoUnityPackage.cs ================================================ using UnityEditor; /// /// Exports ArucoUnity as a Unity package. /// public static class ExportArucoUnityPackage { /// /// Returns the assets list of ArucoUnity. /// private static string[] assets = new string[] { "Assets/ArucoUnity", "Assets/StreamingAssets/ArucoUnity", "Assets/csc.rsp", "Assets/gmcs.rsp", "Assets/mcs.rsp", "Assets/smcs.rsp", "ProjectSettings/TagManager.asset", }; /// /// Exports the ArucoUnity package. /// [MenuItem("ArucoUnity/Export package")] public static void ExportPackage() { AssetDatabase.ExportPackage(assets, "ArucoUnity.unitypackage", ExportPackageOptions.Interactive | ExportPackageOptions.Recurse); } } ================================================ FILE: Assets/Editor/ExportArucoUnityPackage.cs.meta ================================================ fileFormatVersion: 2 guid: a957c6e5b67f18b4a8fe5a9e20885365 timeCreated: 1512419036 licenseType: Free MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Editor.meta ================================================ fileFormatVersion: 2 guid: e9926be021d99d34cbe11679f99a6aba folderAsset: yes timeCreated: 1512418971 licenseType: Free DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/StreamingAssets/ArucoUnity/ArucoWebcamExample.xml ================================================ 2018-04-27T10:33:51.8533927+02:00 1 480 640 256 0 0.23313121492458597 CV_64F 813.27384399463506 0 320.71681236471477 0 813.56026498007554 246.80160109579035 0 0 1 CV_64F 0.0 0.0 0.0 0.0 0.0 CV_8UC1 ================================================ FILE: Assets/StreamingAssets/ArucoUnity/ArucoWebcamExample.xml.meta ================================================ fileFormatVersion: 2 guid: 5733b62ed38c1534db868a3b4835d4de TextScriptImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/StreamingAssets/ArucoUnity/StereoArucoWebcamExample.xml ================================================ 2018-05-07T15:08:23.2461442+02:00 2 480 480 640 640 256 0 0.28655114000475146 0.26335779362039791 CV_64F 815.41897256880657 0 335.13401922989948 0 814.40194707322314 240.35508275468794 0 0 1 813.89123355616232 0 344.00053550713574 0 814.893020911039 224.63391155251512 0 0 1 CV_64F 0.0074405166348916266 0.30509218899253232 -0.0021811911481404438 0.01225694113001902 0.063293334888655683 0.17986394785112808 -3.0873083180701881 0.0014571948911823332 0.003200623852790616 14.588793135132526 CV_8UC1 256 -0.01292102021299946 0.012199954393375801 -0.0047738406858097221 0.078994959596292144 0.000989742418190844 0.0021052472302004769 0.30436502472872112 ================================================ FILE: Assets/StreamingAssets/ArucoUnity/StereoArucoWebcamExample.xml.meta ================================================ fileFormatVersion: 2 guid: fdac39afa7835b04fb98800b708f6ea3 TextScriptImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/StreamingAssets/ArucoUnity.meta ================================================ fileFormatVersion: 2 guid: d86d2db90ebc08b4caddedb0afe8f338 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/StreamingAssets.meta ================================================ fileFormatVersion: 2 guid: 056196931b219d049904115019b10780 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/csc.rsp ================================================ -unsafe ================================================ FILE: Assets/csc.rsp.meta ================================================ fileFormatVersion: 2 guid: 8f1f5139ae17d534fb7a921fba0af5f2 timeCreated: 1483722456 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/gmcs.rsp ================================================ -unsafe ================================================ FILE: Assets/gmcs.rsp.meta ================================================ fileFormatVersion: 2 guid: e097e83b41388494f925a75cc5ce274a timeCreated: 1483722456 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/mcs.rsp ================================================ -unsafe ================================================ FILE: Assets/mcs.rsp.meta ================================================ fileFormatVersion: 2 guid: 1f3d8f1f1f3ac48468db2fdf7ba15824 timeCreated: 1483722710 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/smcs.rsp ================================================ -unsafe ================================================ FILE: Assets/smcs.rsp.meta ================================================ fileFormatVersion: 2 guid: 1484223de2caeb543a88f0741724116c timeCreated: 1483722456 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Documentation/docfx.json ================================================ { "metadata": [ { "src": [ { "src": "../", "files": [ "*.csproj" ] } ], "dest": "api/", "filter": "filterConfig.yml" } ], "build": { "globalMetadata": { "_appTitle": "Aruco Unity documentation", "_appFooter": "Aruco Unity - Erwan Normand", "_enableSearch": true }, "xref": [ "xrefmap.yml" ], "xrefService": [ "https://xref.docs.microsoft.com/query?uid={uid}" ], "content": [ { "src": "manual/", "dest": "manual/", "files": [ "toc.yml", "*.md" ] }, { "files": [ "toc.yml", "index.md", "api/*.yml" ] } ], "resource": [ { "files": [ "images/*" ] } ], "dest": "../_site" } } ================================================ FILE: Documentation/filterConfig.yml ================================================ apiRules: - exclude: uidRegex: ^UnityEngine\.Behaviour type: Type - exclude: uidRegex: ^UnityEngine\.Component type: Type - exclude: uidRegex: ^UnityEngine\.MonoBehaviour type: Type - exclude: uidRegex: ^UnityEngine\.NetworkBehaviour type: Type - exclude: uidRegex: ^UnityEngine\.Object type: Type - exclude: uidRegex: ^UnityEngine\.ScriptableObject type: Type - exclude: uidRegex: ^System\.Object type: Type ================================================ FILE: Documentation/manual/aruco-unity-architecture.md ================================================ # ArucoUnity Architecture ArucoUnity is made of three parts: 1. A [plugin](https://github.com/NormandErwan/ArucoUnityPlugin/) that wraps into a C interface the aruco, calib3d and ccalib modules of OpenCV. 2. A C# interface ([ArucoUnity.Plugin namespace](https://github.com/NormandErwan/ArucoUnity/blob/master/Assets/ArucoUnity/Scripts/Plugin/)) using the plugin to reproduce the OpenCV modules classes and functions. 3. [Unity C# scripts](~/api/ArucoUnity.Calibration.yml) to calibrate cameras and to track markers directly in the editor with good performances. You can code directly with the OpenCV C# equivalent interface but we advise you to work with and extend the Unity scripts. The Unity scripts were originally one camera display and tracking script and one calibration script. For performances and to support multiple types of camera (fisheye, stereoscopic) we decoupled these scripts (*Fig.1*). ![Class diagram](http://www.plantuml.com/plantuml/svg/ZLF1Ri8m3BtdAw8U9nLfTmviHTDssWxZ0znYKBRG8CSze8r_NrbGC12FtIhxFVizvtKM6OY7ZJTRw3vXZVQ1XYuiUiSx-vMB2tRUiSCurbpFI2leqBuqeL-vzK3GUXo_cOBtI6PlCh613HASitutf8OWASFizBkkLOues-c8g-uh3Qie-F_UawcvYriFkwZQEWBEz2cZ9LuUxWreR37InPPdY89uGadkeb-wo87OXLuNAL4tb2eaLSmjthLryNeAQIyTlhOVsF716xIH2JgsdOSOKtfJrnHxZm5eQGGiQHMzlEITne_I0yoHHsAWRFWwN4U18dzoPLq7MzrL6jQgyuwIZ49CNigCacuThmT29wYFMYRihtweT6k1pVMqLtGQGk104fot5GUSvwS1xrg2Gx2K32KZ0gTVP39HAFeFyYVhbCLiIK5UAXUz9m_hQ2uBDmQcAysmNmuR_mC0) *Fig.1: Overview class diagram of the Unity scripts.* ================================================ FILE: Documentation/manual/build-from-sources.md ================================================ # Build From Sources ## Preparation We clone two repository: ArucoUnity which contains the Unity project with C# scripts, and [ArucoUnityPlugin](https://github.com/NormandErwan/ArucoUnityPlugin/) which contains the C interface of the OpenCV modules (see [ArucoUnity Architecture](aruco-unity-architecture.md) for details). Run the following commands: ```bash git clone https://github.com/NormandErwan/ArucoUnity git clone https://github.com/NormandErwan/ArucoUnityPlugin mkdir -p ArucoUnityPlugin/build/opencv/ ``` ## Build OpenCV We need a build of OpenCV (3.3 ⩽ version ⩽ 3.4) with the calib3d module and the aruco and ccalib *contrib* modules. These two contrib modules are not included in the official OpenCV releases. A CMake project is already configured ready to be build. Run the following commands: ```bash cd ArucoUnityPlugin/build/opencv/ cmake -DCMAKE_INSTALL_PREFIX=install/ -G ../../3rdparty/opencv_contrib/ cmake --build . --config Release ``` If you're not familiar with CMake generators, see this [list of generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) to set the `` variable above. For example, use use "Visual Studio 15 2017 Win64" with Visual Studio 2017 installed. Alternatively, you can follow the [opencv_contrib instructions](https://github.com/opencv/opencv_contrib). ## Build ArucoUnityPlugin First, make sure Unity is closed during the installation, unless the plugin installation will fail. Configure the building solution of the ArucoUnityPlugin, compile and install it by running the following commands: ```bash cd ArucoUnityPlugin/build/ cmake -DCMAKE_INSTALL_PREFIX=.. -DOpenCV_DIR=build/opencv/install/ -DArucoUnity_DIR=../../ArucoUnity/ -G .. cmake --build . --config Release --target INSTALL ``` The installation will copy the plugin into the `bin/` and `lib/` folders. It will also copy the plugin and the OpenCV libraries to the `ArucoUnity/Assets/Plugins/` folder. On Linux the correct path to the `-DOpenCV_DIR` option above may be set to `build/opencv/install/share/OpenCV/`. ## Export the ArucoUnity package Open the `ArucoUnity/` folder in Unity. No errors should be displayed in the Console panel. A new entry named "ArucoUnity" is in the menu bar. Open it and select "Export package". ![Export ArucoUnity package](~/images/export_package.jpg) ## Generate Documentation Install the documentation generator [DocFX](http://dotnet.github.io/docfx/tutorial/docfx_getting_started.html). Run the following commands: ```bash cd ArucoUnity cp README.md Documentation/index.md docfx Documentation/docfx.json docfx serve _site ``` Open the generated website on [http://localhost:8080](http://localhost:8080). ================================================ FILE: Documentation/manual/calibrate-a-camera.md ================================================ # Calibrate a Camera ## Motivation In order to be able to track markers you need to calibrate your camera, i.e. measure the camera parameters. The calibration process may seems long but it's only because there is lots of customization options. The principle is straightforward: (1) print a calibration board and (2) take images with your camera of the board in different positions and orientations. ArucoUnity will generate XML file containing the camera parameters. To understand the algorithms used, read these tutorials: [Calibration with ArUco and ChArUco](https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html) and [Camera calibration With OpenCV](https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html). ## Calibrate a camera Most of the cameras we use today on our smartphones or laptops are called in ArucoUnity pinhole cameras (camera using a [rectilinear lens](https://en.wikipedia.org/wiki/Rectilinear_lens)) in contrast with cameras using a [fisheye lens](https://en.wikipedia.org/wiki/Fisheye_lens). So if you want to calibrate your webcam or smartphone, read this section. - Make a calibration board. 1. Create a charuco board or a grid board. See the [Create Markers](create-markers.md) page for details. 2. Print the generated image on paper. Stick it on a hard cardboard: the paper must remains as flat as possible during the calibration (*Fig.1*). ![Calibration board](https://docs.opencv.org/3.4/charucocalibration.png) *Fig.1: Different viewpoints of a charuco calibration board. From OpenCV: [https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html](https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html)* - Open the `Assets/ArucoUnity/Scenes/CalibrateCamera.unity` scene. - Configure the `ArucoWebcam` game object (*Fig.2*). - Set the `WebcamId` to select the camera you want to use. The first camera's id is `0`. You can list the available webcams with [WebCamTexture.devices](https://docs.unity3d.com/ScriptReference/WebCamTexture-devices.html). - `MonoArucoCameraDisplay.AutoStart` is uncheck because the video stream is displayed by the `ArucoCameraCalibrationGUI` object. ![Calibration camera configuration](~/images/calibration_aruco_webcam.jpg) *Fig.2: Default configuration of `ArucoWebcam` using the first webcam (id=`0`).* - Configure the calibration board on the `PinholeCameraCalibration` game object (*Fig.3*). - Set the `CalibrationBoard` with a charuco board or a grid board. Both are already created in the scene to help you. - Configure the calibration board object by measuring the one you just printed : units are in meters this time. The `ArucoObjectDisplayer` helps you visualize the configured board to see if it's match with the printed one. Don't switch x and y values. - Optionally adjust parameters on the `PinholeCameraCalibration` game object. - Set the output camera parameters file with `CameraParametersController`: - The folder is relative to [persistentDataPath](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html) in builds or to the "Asset" folder of your projet in the editor. - If the filename is empty, it will be automatically generated from the camera used. - If you want to refine a previous calibration, set the filename of the camera parameters XML file (with the .xml extension). - Configure the board detection with `DetectorParametersController` parameters. They are described on the Detector Parameters section of the [ArUco camera calibration tutorial](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html). - Configure the calibration flags with `PinholeCameraCalibrationFlags`. They are described on the [calib3d::calibrateCamera() function](https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga3207604e4b1a1758aa66acb6ed5aa65d) documentation. ![Calibration configuration](~/images/calibration_pinhole_camera.jpg) *Fig.3: `PinholeCameraCalibration` configured with a charuco board.* - Run the scene and interact with the UI to calibrate your camera (*Fig.4*). 1. Hold the calibration board in front of your camera and click on the `Add Image` button. Think to deactivate the autofocus of your camera: a calibration is done for only one focal length at the time. 2. Take at least 10 images of you calibration board in different positions and orientations without moving the camera between each snapshot. See this [example of images](https://upload.wikimedia.org/wikipedia/commons/0/05/Multiple_chessboard_views.png). 3. Reset the image list if you want to start over with the `Reset` button. 4. Calibrate your camera with the image list with the `Calibrate` button. The reprojection error is displayed to score the calibration precision: it should be close to 0 px. Read the responses of this [stackoverflow question](https://stackoverflow.com/q/12794876) to improve your calibrations. ![Calibration scene running](~/images/calibration_running.jpg) *Fig.4: Calibration scene running.* ## Calibrate a stereoscopic camera The process is the same as in the [Calibrate a camera](#calibrate-a-camera-1) section but we use differents camera and calibration scripts. - Make a calibration board. - Open the `Assets/ArucoUnity/Scenes/CalibrateCamera.unity` scene. - Configure the camera: 1. Deactivate the `ArucoWebcam` game object. 2. Drag `Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab` into the scene. 3. Set `StereoArucoWebcam.WebcamId1`, `StereoArucoWebcam.WebcamId2` and uncheck `StereoArucoCameraDisplay.AutoStart` (*Fig.5*). ![Calibration camera configuration](~/images/stereo_calibration_aruco_webcam.jpg) *Fig.5: Stereo webcam configured to use the first (id1=`0`) and the second webcam (id2=`1`)* - Configure the calibration: 1. Deactivate the `PinholeCameraCalibration` game object. 2. Drag `Assets/ArucoUnity/Prefabs/Calibration/StereoPinholeCameraCalibration.prefab` into the scene. 3. Set `StereoPinholeCameraCalibration.ArucoCamera` with `StereoArucoWebcam` (*Fig.6*). 4. Set `ArucoCameraCalibrationGUI.ArucoCameraCalibration` with `StereoPinholeCameraCalibration` (*Fig.7*). 5. Optionally adjust detection and calibration parameters. ![Calibration configuration](~/images/stereo_calibration_pinhole_camera.jpg) *Fig.6: `StereoPinholeCameraCalibration` configured with a charuco board.* ![Calibration GUI configuration](~/images/stereo_calibration_gui.jpg) *Fig.7: `ArucoCameraCalibrationGUI` configured with `StereoPinholeCameraCalibration`.* - Run the scene and calibration your camera (*Fig.8*). ![Calibration scene running](~/images/stereo_calibration_running.jpg) *Fig.8: Calibration scene running.* ## Calibrate a fisheye camera Follow the [Calibrate a stereoscopic camera](#calibrate-a-stereoscopic-camera) section but use `OmnidirCameraCalibration` prefab for a monoscopic camera or `StereoOmnidirCameraCalibration` prefab for a stereoscopic camera (*Fig.9*). ![Calibration scene running](~/images/stereo_fisheye_calibration_running.jpg) *Fig.9: Calibration scene running for a stereoscopic fisheye camera.* The algorithms used are described in this tutorial: [Omnidirectional Cameara [sic] Calibration](https://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html). ## Reuse calibration data You may already have calibrated your camera and want to directly reuse your calibration data. ArucoUnity doesn't use the YAML format used by OpenCV to store these data but use XML files. Therefore you need to create by hand calibration file for ArucoUnity. Make a copy of `Assets/ArucoUnity/CameraParameters/Example.xml` and transfer your calibration data. ================================================ FILE: Documentation/manual/create-markers.md ================================================ # Create Markers ## Motivation Before tracking markers with your camera, you need to create, print and place them in the environment. You can use four type of Aruco objects: [markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html), [grid boards](https://docs.opencv.org/3.4/db/da9/tutorial_aruco_board_detection.html), [charuco boards](https://docs.opencv.org/3.4/df/d4a/tutorial_charuco_detection.html) and [diamond markers](https://docs.opencv.org/3.4/d5/d07/tutorial_charuco_diamond_detection.html). ![Aruco Objects](../images/aruco_objects.png) *From left to right: a marker, a diamond marker, a grid board, a charuco board.* ## `CreateMarkers` scene Open the `Assets/ArucoUnity/Scenes/CreateMarkers.unity` scene to visualize the Aruco objects. Play this scene to create them. You can find the created images in `Assets/ArucoUnity/Images/`. ## Manual creation ### Marker ![Create a marker](../images/create_marker.gif) *Manual creation and configuration of a marker.* 1. Create an empty object. 2. Add a `ArucoMarker` script. Configure it: - Select a dictionary of markers. It determines the marker size (for example 4x4 bits) and had a size (for example 50 markers). A lower dictionary size is better to avoid detection errors. For more details, see "Markers and Dictionaries" and "Selection a dictionary" sections of this [tutorial](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html). - Set `MarkerSideLength` in pixels. It controls the image size. - Set `MarkerBorderBits` with a minimum of 1. It controls the width of the black border of the marker, helping its detection. - Set `MarkerId`, from 0 to the dictionary size. 3. Add a `ArucoObjectCreator` script. Configure it: - Add the `ArucoMarker` script to the `ArucoObject` field. - Check `DisplayInPlayMode` if you want to display the marker in play mode. - Check `SaveImage` to save the marker in an image file in play mode. - Set the `OutputFolder` path to save the image, relative to the [persistentDataPath](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html) in builds or to the "Assets" folder of your project in the editor. - Check `AutomaticFilename` for an automatic image filename based on the `ArucoObject` property values. - Set the image filename in `OptionalImageFilename` if `AutomaticFilename` is not checked. 4. Play the scene. The marker is automatically created on a child plane of our object and saved on the project folder. ### Grid board ![Create a grid board](../images/create_grid_board.jpg) *Example of a grid board with the corresponding configuration.* The process is the same as in the [marker](#marker) subsection. The additional configurable parameters are: - `MarkersNumberX`: The number of markers on the board X axis. - `MarkersNumberY`: The number of markers on the board Y axis. - `MarkerSeparation`: The margin between markers in pixels. ### Charuco board ![Create a charuco board](~/images/create_charuco_board.jpg) *Example of a charuco board with the corresponding configuration.* The process is the same as in the [marker](#marker) subsection. The additional configurable parameters are: - `MarginLength`: The markers margin on the white squares. - `SquaresNumberX`: The number of squares on the board X axis. - `SquaresNumberY`: The number of squares on the board Y axis. - `SquareSideLength`: The width in pixels of each square. ### Diamond marker ![Create a diamond marker](~/images/create_diamond.jpg) *Example of a diamond marker with the corresponding configuration.* The process is the same as in the [marker](#marker) subsection. The additional configurable parameters are: - `SquareSideLength`: The width in pixels of each square. - `MarkersXId`: The ids of the four markers. ================================================ FILE: Documentation/manual/toc.yml ================================================ - name: Create Markers href: create-markers.md - name: Calibrate a Camera href: calibrate-a-camera.md - name: Track Markers href: track-markers.md - name: Aruco Unity Architecture href: aruco-unity-architecture.md - name: Build From Sources href: build-from-sources.md ================================================ FILE: Documentation/manual/track-markers.md ================================================ # Track Markers First, make sure you have calibrated your camera: read the [Calibrate a Camera](calibrate-a-camera.md) page. You **need to have a calibration file** to track some aruco objects. Also, print and place in the environment the aruco objects you want to track. Read the [Create Markers](create-markers.md) page for details. To track your aruco objects: - Open the `Assets/ArucoUnity/Scenes/TrackMarkers.unity` scene. - Configure the camera: 1. For a webcam, use the `ArucoWebcamCalibrated` object already in the scene. Otherwise, drag the prefab corresponding to your camera : `Assets/ArucoUnity/Prefabs/Cameras/Calibrated.prefab`. 2. Fill `CameraParametersFilename` with the camera parameters XML file from the calibration of the camera (*Fig.1*). ![Camera configuration](~/images/track_markers_camera.jpg) *Fig.1: `ArucoWebcamCalibrated` configured with camera parameters from a calibration.* - Create each aruco objects to track: - Configure it with what you measure on the printed aruco object. Units are in meters for tracking, not in pixels. - Use a `ArucoObjectDisplayer` to visualize the aruco object, not a ArucoObjectCreator. - Simply add any game object as child of the aruco object e.g. the red cube in *Fig.2*. ![Marker configuration](~/images/track_markers_marker.jpg) *Fig.2: `ArucoMarker` configured to track a physical aruco marker with a 5.4 cm side length. The `ArucoObjectDisplayer` helps to visualize in the editor the physical object that will be tracked.* - Configure the tracker `ArucoObjectsTracker`: 1. Drag all the aruco objects to track in `ArucoObjects`. 2. Set `ArucoCameraDisplay` with the camera prefab you use (*Fig.3*). ![Tracker configuration](~/images/track_markers_tracker.jpg) *Fig.3: `ArucoObjectsTracker` configured to track three objects for the `ArucoCameraCalibrated` we configured.* - Run the scene! The `ArucoTracker` will place (position, rotation, scale) any detected aruco object in the `ArucoObjects` list relative to the camera (*Fig.4*). ![AR roll a ball](~/images/ar_roll_a_ball.gif) *Fig.4: [Roll a ball](https://unity3d.com/fr/learn/tutorials/s/roll-ball-tutorial) set as child of an aruco board: the game follows the board movements.* To understand the algorithm used, read this tutorial: [Detection of ArUco Markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html). ================================================ FILE: Documentation/toc.yml ================================================ - name: Manual href: manual/ - name: Scripting API href: api/ ================================================ FILE: Documentation/xrefmap.yml ================================================ ### YamlMime:XRefMap references: - uid: UnityEngine.Behaviour name: Behaviour href: https://docs.unity3d.com/Documentation/ScriptReference/Behaviour.html - uid: UnityEngine.Color name: Color href: https://docs.unity3d.com/Documentation/ScriptReference/Color.html - uid: UnityEngine.Component name: Component href: https://docs.unity3d.com/Documentation/ScriptReference/Component.html - uid: UnityEngine.MonoBehaviour name: MonoBehaviour href: https://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.html - uid: UnityEngine.Object name: Object href: https://docs.unity3d.com/Documentation/ScriptReference/Object.html - uid: UnityEngine.ScriptableObject name: Object href: https://docs.unity3d.com/Documentation/ScriptReference/ScriptableObject.html - uid: UnityEngine.Texture2D name: Texture2D href: https://docs.unity3d.com/Documentation/ScriptReference/Texture2D.html - uid: UnityEngine.TextureFormat name: TextureFormat href: https://docs.unity3d.com/Documentation/ScriptReference/TextureFormat.html - uid: UnityEngine.Vector2 name: Vector2 href: https://docs.unity3d.com/Documentation/ScriptReference/Vector2.html - uid: UnityEngine.Vector2Int name: Vector2Int href: https://docs.unity3d.com/Documentation/ScriptReference/Vector2Int.html - uid: UnityEngine.Vector3 name: Vector3 href: https://docs.unity3d.com/Documentation/ScriptReference/Vector3.html ================================================ FILE: LICENSE ================================================ BSD 3-Clause License Copyright (c) 2017, Erwan Normand All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: ProjectSettings/AudioManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!11 &1 AudioManager: m_ObjectHideFlags: 0 m_Volume: 1 Rolloff Scale: 1 Doppler Factor: 1 Default Speaker Mode: 2 m_SampleRate: 0 m_DSPBufferSize: 0 m_VirtualVoiceCount: 512 m_RealVoiceCount: 32 m_SpatializerPlugin: m_AmbisonicDecoderPlugin: m_DisableAudio: 0 m_VirtualizeEffects: 1 ================================================ FILE: ProjectSettings/ClusterInputManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!236 &1 ClusterInputManager: m_ObjectHideFlags: 0 m_Inputs: [] ================================================ FILE: ProjectSettings/DynamicsManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!55 &1 PhysicsManager: m_ObjectHideFlags: 0 serializedVersion: 3 m_Gravity: {x: 0, y: -9.81, z: 0} m_DefaultMaterial: {fileID: 0} m_BounceThreshold: 2 m_SleepThreshold: 0.005 m_DefaultContactOffset: 0.01 m_DefaultSolverIterations: 6 m_DefaultSolverVelocityIterations: 1 m_QueriesHitBackfaces: 0 m_QueriesHitTriggers: 1 m_EnableAdaptiveForce: 0 m_EnablePCM: 1 m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_AutoSimulation: 1 m_AutoSyncTransforms: 1 ================================================ FILE: ProjectSettings/EditorBuildSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!1045 &1 EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: [] ================================================ FILE: ProjectSettings/EditorSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!159 &1 EditorSettings: m_ObjectHideFlags: 0 serializedVersion: 5 m_ExternalVersionControlSupport: Visible Meta Files m_SerializationMode: 2 m_DefaultBehaviorMode: 0 m_SpritePackerMode: 2 m_SpritePackerPaddingPower: 1 m_EtcTextureCompressorBehavior: 0 m_EtcTextureFastCompressor: 0 m_EtcTextureNormalCompressor: 2 m_EtcTextureBestCompressor: 5 m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd m_ProjectGenerationRootNamespace: m_UserGeneratedProjectSuffix: m_CollabEditorSettings: inProgressEnabled: 1 ================================================ FILE: ProjectSettings/GraphicsSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 serializedVersion: 12 m_Deferred: m_Mode: 1 m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} m_DeferredReflections: m_Mode: 1 m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} m_ScreenSpaceShadows: m_Mode: 1 m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} m_LegacyDeferred: m_Mode: 1 m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} m_DepthNormals: m_Mode: 1 m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} m_MotionVectors: m_Mode: 1 m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} m_LightHalo: m_Mode: 1 m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} m_LensFlare: m_Mode: 1 m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} m_AlwaysIncludedShaders: - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} m_CustomRenderPipeline: {fileID: 0} m_TransparencySortMode: 0 m_TransparencySortAxis: {x: 0, y: 0, z: 1} m_DefaultRenderingPath: 1 m_DefaultMobileRenderingPath: 1 m_TierSettings: [] m_LightmapStripping: 0 m_FogStripping: 0 m_InstancingStripping: 0 m_LightmapKeepPlain: 1 m_LightmapKeepDirCombined: 1 m_LightmapKeepDynamicPlain: 1 m_LightmapKeepDynamicDirCombined: 1 m_LightmapKeepShadowMask: 1 m_LightmapKeepSubtractive: 1 m_FogKeepLinear: 1 m_FogKeepExp: 1 m_FogKeepExp2: 1 m_AlbedoSwatchInfos: [] m_LightsUseLinearIntensity: 0 m_LightsUseColorTemperature: 0 ================================================ FILE: ProjectSettings/InputManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!13 &1 InputManager: m_ObjectHideFlags: 0 serializedVersion: 2 m_Axes: - serializedVersion: 3 m_Name: Horizontal descriptiveName: descriptiveNegativeName: negativeButton: left positiveButton: right altNegativeButton: a altPositiveButton: d gravity: 3 dead: 0.001 sensitivity: 3 snap: 1 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Vertical descriptiveName: descriptiveNegativeName: negativeButton: down positiveButton: up altNegativeButton: s altPositiveButton: w gravity: 3 dead: 0.001 sensitivity: 3 snap: 1 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Fire1 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: left ctrl altNegativeButton: altPositiveButton: mouse 0 gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Fire2 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: left alt altNegativeButton: altPositiveButton: mouse 1 gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Fire3 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: left shift altNegativeButton: altPositiveButton: mouse 2 gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Jump descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: space altNegativeButton: altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Mouse X descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: altNegativeButton: altPositiveButton: gravity: 0 dead: 0 sensitivity: 0.1 snap: 0 invert: 0 type: 1 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Mouse Y descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: altNegativeButton: altPositiveButton: gravity: 0 dead: 0 sensitivity: 0.1 snap: 0 invert: 0 type: 1 axis: 1 joyNum: 0 - serializedVersion: 3 m_Name: Mouse ScrollWheel descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: altNegativeButton: altPositiveButton: gravity: 0 dead: 0 sensitivity: 0.1 snap: 0 invert: 0 type: 1 axis: 2 joyNum: 0 - serializedVersion: 3 m_Name: Horizontal descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: altNegativeButton: altPositiveButton: gravity: 0 dead: 0.19 sensitivity: 1 snap: 0 invert: 0 type: 2 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Vertical descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: altNegativeButton: altPositiveButton: gravity: 0 dead: 0.19 sensitivity: 1 snap: 0 invert: 1 type: 2 axis: 1 joyNum: 0 - serializedVersion: 3 m_Name: Fire1 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: joystick button 0 altNegativeButton: altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Fire2 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: joystick button 1 altNegativeButton: altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Fire3 descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: joystick button 2 altNegativeButton: altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Jump descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: joystick button 3 altNegativeButton: altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Submit descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: return altNegativeButton: altPositiveButton: joystick button 0 gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Submit descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: enter altNegativeButton: altPositiveButton: space gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 - serializedVersion: 3 m_Name: Cancel descriptiveName: descriptiveNegativeName: negativeButton: positiveButton: escape altNegativeButton: altPositiveButton: joystick button 1 gravity: 1000 dead: 0.001 sensitivity: 1000 snap: 0 invert: 0 type: 0 axis: 0 joyNum: 0 ================================================ FILE: ProjectSettings/NavMeshAreas.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!126 &1 NavMeshProjectSettings: m_ObjectHideFlags: 0 serializedVersion: 2 areas: - name: Walkable cost: 1 - name: Not Walkable cost: 1 - name: Jump cost: 2 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 - name: cost: 1 m_LastAgentTypeID: -887442657 m_Settings: - serializedVersion: 2 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 agentSlope: 45 agentClimb: 0.75 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 minRegionArea: 2 manualCellSize: 0 cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 accuratePlacement: 0 debug: m_Flags: 0 m_SettingNames: - Humanoid ================================================ FILE: ProjectSettings/NetworkManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!149 &1 NetworkManager: m_ObjectHideFlags: 0 m_DebugLevel: 0 m_Sendrate: 15 m_AssetToPrefab: {} ================================================ FILE: ProjectSettings/Physics2DSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!19 &1 Physics2DSettings: m_ObjectHideFlags: 0 serializedVersion: 3 m_Gravity: {x: 0, y: -9.81} m_DefaultMaterial: {fileID: 0} m_VelocityIterations: 8 m_PositionIterations: 3 m_VelocityThreshold: 1 m_MaxLinearCorrection: 0.2 m_MaxAngularCorrection: 8 m_MaxTranslationSpeed: 100 m_MaxRotationSpeed: 360 m_BaumgarteScale: 0.2 m_BaumgarteTimeOfImpactScale: 0.75 m_TimeToSleep: 0.5 m_LinearSleepTolerance: 0.01 m_AngularSleepTolerance: 2 m_DefaultContactOffset: 0.01 m_AutoSimulation: 1 m_QueriesHitTriggers: 1 m_QueriesStartInColliders: 1 m_ChangeStopsCallbacks: 0 m_CallbacksOnDisable: 1 m_AutoSyncTransforms: 1 m_AlwaysShowColliders: 0 m_ShowColliderSleep: 1 m_ShowColliderContacts: 0 m_ShowColliderAABB: 0 m_ContactArrowScale: 0.2 m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ================================================ FILE: ProjectSettings/PresetManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!1386491679 &1 PresetManager: m_ObjectHideFlags: 0 m_DefaultList: [] ================================================ FILE: ProjectSettings/ProjectSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 serializedVersion: 15 productGUID: c82aefa811a5f4a4e98a08c4cb7ca35b AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 AndroidEnableSustainedPerformanceMode: 0 defaultScreenOrientation: 4 targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 companyName: Erwan Normand productName: ArucoUnity defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} m_ShowUnitySplashScreen: 1 m_ShowUnitySplashLogo: 1 m_SplashScreenOverlayOpacity: 1 m_SplashScreenAnimation: 1 m_SplashScreenLogoStyle: 1 m_SplashScreenDrawMode: 0 m_SplashScreenBackgroundAnimationZoom: 1 m_SplashScreenLogoAnimationZoom: 1 m_SplashScreenBackgroundLandscapeAspect: 1 m_SplashScreenBackgroundPortraitAspect: 1 m_SplashScreenBackgroundLandscapeUvs: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 m_SplashScreenBackgroundPortraitUvs: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 m_SplashScreenLogos: [] m_VirtualRealitySplashScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0} defaultScreenWidth: 1024 defaultScreenHeight: 768 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 m_MTRendering: 1 m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 tizenShowActivityIndicatorOnLoading: -1 iosAppInBackgroundBehavior: 0 displayResolutionDialog: 1 iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 allowedAutorotateToLandscapeRight: 1 allowedAutorotateToLandscapeLeft: 1 useOSAutorotation: 1 use32BitDisplayBuffer: 1 preserveFramebufferAlpha: 0 disableDepthAndStencilBuffers: 0 androidBlitType: 0 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 0 captureSingleScreen: 0 muteOtherAudioSources: 0 Prepare IOS For Recording: 0 Force IOS Speakers When Recording: 0 deferSystemGesturesMode: 0 hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 resizableWindow: 0 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games gpuSkinning: 0 graphicsJobs: 0 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 xboxEnableKinect: 0 xboxEnableKinectAutoTracking: 0 xboxEnableFitness: 0 visibleInBackground: 0 allowFullscreenSwitch: 1 graphicsJobMode: 0 fullscreenMode: 1 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 xboxEnableGuest: 0 xboxEnablePIXSampling: 0 metalFramebufferOnly: 0 n3dsDisableStereoscopicView: 0 n3dsEnableSharedListOpt: 1 n3dsEnableVSync: 0 xboxOneResolution: 0 xboxOneSResolution: 0 xboxOneXResolution: 3 xboxOneMonoLoggingLevel: 0 xboxOneLoggingLevel: 1 xboxOneDisableEsram: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 videoMemoryForVertexBuffers: 0 psp2PowerMode: 0 psp2AcquireBGM: 1 m_SupportedAspectRatios: 4:3: 1 5:4: 1 16:10: 1 16:9: 1 Others: 1 bundleVersion: 2.0 preloadedAssets: [] metroInputSource: 0 wsaTransparentSwapchain: 0 m_HolographicPauseOnTrackingLoss: 1 xboxOneDisableKinectGpuReservation: 0 xboxOneEnable7thCore: 0 vrSettings: cardboard: depthFormat: 0 enableTransitionView: 0 daydream: depthFormat: 0 useSustainedPerformanceMode: 0 enableVideoLayer: 0 useProtectedVideoMemory: 0 minimumSupportedHeadTracking: 0 maximumSupportedHeadTracking: 1 hololens: depthFormat: 1 depthBufferSharingEnabled: 0 enable360StereoCapture: 0 oculus: sharedDepthBuffer: 0 dashSupport: 0 protectGraphicsMemory: 0 useHDRDisplay: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 applicationIdentifier: Android: com.Company.ProductName Standalone: fr.normanderwan.arucounity Tizen: com.Company.ProductName iOS: com.Company.ProductName tvOS: com.Company.ProductName buildNumber: iOS: 0 AndroidBundleVersionCode: 1 AndroidMinSdkVersion: 16 AndroidTargetSdkVersion: 0 AndroidPreferredInstallLocation: 1 aotOptions: stripEngineCode: 1 iPhoneStrippingLevel: 0 iPhoneScriptCallOptimization: 0 ForceInternetPermission: 0 ForceSDCardPermission: 0 CreateWallpaper: 0 APKExpansionFiles: 0 keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 0 VertexChannelCompressionMask: 214 iPhoneSdkVersion: 988 iOSTargetOSVersionString: 8.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 9.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 uIStatusBarHidden: 1 uIExitOnSuspend: 0 uIStatusBarStyle: 0 iPhoneSplashScreen: {fileID: 0} iPhoneHighResSplashScreen: {fileID: 0} iPhoneTallHighResSplashScreen: {fileID: 0} iPhone47inSplashScreen: {fileID: 0} iPhone55inPortraitSplashScreen: {fileID: 0} iPhone55inLandscapeSplashScreen: {fileID: 0} iPhone58inPortraitSplashScreen: {fileID: 0} iPhone58inLandscapeSplashScreen: {fileID: 0} iPadPortraitSplashScreen: {fileID: 0} iPadHighResPortraitSplashScreen: {fileID: 0} iPadLandscapeSplashScreen: {fileID: 0} iPadHighResLandscapeSplashScreen: {fileID: 0} appleTVSplashScreen: {fileID: 0} appleTVSplashScreen2x: {fileID: 0} tvOSSmallIconLayers: [] tvOSSmallIconLayers2x: [] tvOSLargeIconLayers: [] tvOSLargeIconLayers2x: [] tvOSTopShelfImageLayers: [] tvOSTopShelfImageLayers2x: [] tvOSTopShelfImageWideLayers: [] tvOSTopShelfImageWideLayers2x: [] iOSLaunchScreenType: 0 iOSLaunchScreenPortrait: {fileID: 0} iOSLaunchScreenLandscape: {fileID: 0} iOSLaunchScreenBackgroundColor: serializedVersion: 2 rgba: 0 iOSLaunchScreenFillPct: 100 iOSLaunchScreenSize: 100 iOSLaunchScreenCustomXibPath: iOSLaunchScreeniPadType: 0 iOSLaunchScreeniPadImage: {fileID: 0} iOSLaunchScreeniPadBackgroundColor: serializedVersion: 2 rgba: 0 iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 iOSLaunchScreeniPadCustomXibPath: iOSUseLaunchScreenStoryboard: 0 iOSLaunchScreenCustomStoryboardPath: iOSDeviceRequirements: [] iOSURLSchemes: [] iOSBackgroundModes: 0 iOSMetalForceHardShadows: 0 metalEditorSupport: 1 metalAPIValidation: 1 iOSRenderExtraFrameOnPause: 1 appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 appleEnableProMotion: 0 clonedFromGUID: 00000000000000000000000000000000 templatePackageId: templateDefaultScene: AndroidTargetArchitectures: 5 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} AndroidKeystoreName: AndroidKeyaliasName: AndroidTVCompatibility: 1 AndroidIsGame: 1 AndroidEnableTango: 0 androidEnableBanner: 1 androidUseLowAccuracyLocation: 0 m_AndroidBanners: - width: 320 height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 resolutionDialogBanner: {fileID: 0} m_BuildTargetIcons: [] m_BuildTargetPlatformIcons: [] m_BuildTargetBatching: [] m_BuildTargetGraphicsAPIs: [] m_BuildTargetVRSettings: - m_BuildTarget: Android m_Enabled: 0 m_Devices: - Oculus - m_BuildTarget: Metro m_Enabled: 0 m_Devices: [] - m_BuildTarget: N3DS m_Enabled: 0 m_Devices: [] - m_BuildTarget: PS3 m_Enabled: 0 m_Devices: [] - m_BuildTarget: PS4 m_Enabled: 0 m_Devices: - PlayStationVR - m_BuildTarget: PSM m_Enabled: 0 m_Devices: [] - m_BuildTarget: PSP2 m_Enabled: 0 m_Devices: [] - m_BuildTarget: SamsungTV m_Enabled: 0 m_Devices: [] - m_BuildTarget: Standalone m_Enabled: 0 m_Devices: - Oculus - m_BuildTarget: Tizen m_Enabled: 0 m_Devices: [] - m_BuildTarget: WebGL m_Enabled: 0 m_Devices: [] - m_BuildTarget: WebPlayer m_Enabled: 0 m_Devices: [] - m_BuildTarget: WiiU m_Enabled: 0 m_Devices: [] - m_BuildTarget: Xbox360 m_Enabled: 0 m_Devices: [] - m_BuildTarget: XboxOne m_Enabled: 0 m_Devices: [] - m_BuildTarget: iOS m_Enabled: 0 m_Devices: [] - m_BuildTarget: tvOS m_Enabled: 0 m_Devices: [] m_BuildTargetEnableVuforiaSettings: [] openGLRequireES31: 0 openGLRequireES31AEP: 0 m_TemplateCustomTags: {} mobileMTRendering: iPhone: 1 tvOS: 1 m_BuildTargetGroupLightmapEncodingQuality: - m_BuildTarget: Standalone m_EncodingQuality: 1 - m_BuildTarget: XboxOne m_EncodingQuality: 1 - m_BuildTarget: PS4 m_EncodingQuality: 1 playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 enableCrashReportAPI: 0 cameraUsageDescription: locationUsageDescription: microphoneUsageDescription: switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: switchTitleNames_0: switchTitleNames_1: switchTitleNames_2: switchTitleNames_3: switchTitleNames_4: switchTitleNames_5: switchTitleNames_6: switchTitleNames_7: switchTitleNames_8: switchTitleNames_9: switchTitleNames_10: switchTitleNames_11: switchTitleNames_12: switchTitleNames_13: switchTitleNames_14: switchPublisherNames_0: switchPublisherNames_1: switchPublisherNames_2: switchPublisherNames_3: switchPublisherNames_4: switchPublisherNames_5: switchPublisherNames_6: switchPublisherNames_7: switchPublisherNames_8: switchPublisherNames_9: switchPublisherNames_10: switchPublisherNames_11: switchPublisherNames_12: switchPublisherNames_13: switchPublisherNames_14: switchIcons_0: {fileID: 0} switchIcons_1: {fileID: 0} switchIcons_2: {fileID: 0} switchIcons_3: {fileID: 0} switchIcons_4: {fileID: 0} switchIcons_5: {fileID: 0} switchIcons_6: {fileID: 0} switchIcons_7: {fileID: 0} switchIcons_8: {fileID: 0} switchIcons_9: {fileID: 0} switchIcons_10: {fileID: 0} switchIcons_11: {fileID: 0} switchIcons_12: {fileID: 0} switchIcons_13: {fileID: 0} switchIcons_14: {fileID: 0} switchSmallIcons_0: {fileID: 0} switchSmallIcons_1: {fileID: 0} switchSmallIcons_2: {fileID: 0} switchSmallIcons_3: {fileID: 0} switchSmallIcons_4: {fileID: 0} switchSmallIcons_5: {fileID: 0} switchSmallIcons_6: {fileID: 0} switchSmallIcons_7: {fileID: 0} switchSmallIcons_8: {fileID: 0} switchSmallIcons_9: {fileID: 0} switchSmallIcons_10: {fileID: 0} switchSmallIcons_11: {fileID: 0} switchSmallIcons_12: {fileID: 0} switchSmallIcons_13: {fileID: 0} switchSmallIcons_14: {fileID: 0} switchManualHTML: switchAccessibleURLs: switchLegalInformation: switchMainThreadStackSize: 1048576 switchPresenceGroupId: switchLogoHandling: 0 switchReleaseVersion: 0 switchDisplayVersion: 1.0.0 switchStartupUserAccount: 0 switchTouchScreenUsage: 0 switchSupportedLanguagesMask: 0 switchLogoType: 0 switchApplicationErrorCodeCategory: switchUserAccountSaveDataSize: 0 switchUserAccountSaveDataJournalSize: 0 switchApplicationAttribute: 0 switchCardSpecSize: -1 switchCardSpecClock: -1 switchRatingsMask: 0 switchRatingsInt_0: 0 switchRatingsInt_1: 0 switchRatingsInt_2: 0 switchRatingsInt_3: 0 switchRatingsInt_4: 0 switchRatingsInt_5: 0 switchRatingsInt_6: 0 switchRatingsInt_7: 0 switchRatingsInt_8: 0 switchRatingsInt_9: 0 switchRatingsInt_10: 0 switchRatingsInt_11: 0 switchLocalCommunicationIds_0: switchLocalCommunicationIds_1: switchLocalCommunicationIds_2: switchLocalCommunicationIds_3: switchLocalCommunicationIds_4: switchLocalCommunicationIds_5: switchLocalCommunicationIds_6: switchLocalCommunicationIds_7: switchParentalControl: 0 switchAllowsScreenshot: 1 switchAllowsVideoCapturing: 1 switchAllowsRuntimeAddOnContentInstall: 0 switchDataLossConfirmation: 0 switchSupportedNpadStyles: 3 switchSocketConfigEnabled: 0 switchTcpInitialSendBufferSize: 32 switchTcpInitialReceiveBufferSize: 64 switchTcpAutoSendBufferSizeMax: 256 switchTcpAutoReceiveBufferSizeMax: 256 switchUdpSendBufferSize: 9 switchUdpReceiveBufferSize: 42 switchSocketBufferEfficiency: 4 switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 switchPlayerConnectionEnabled: 1 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: ps4ParentalLevel: 1 ps4ContentID: ED1633-NPXX51362_00-0000000000000000 ps4Category: 0 ps4MasterVersion: 01.00 ps4AppVersion: 01.00 ps4AppType: 0 ps4ParamSfxPath: ps4VideoOutPixelFormat: 0 ps4VideoOutInitialWidth: 1920 ps4VideoOutBaseModeInitialWidth: 1920 ps4VideoOutReprojectionRate: 60 ps4PronunciationXMLPath: ps4PronunciationSIGPath: ps4BackgroundImagePath: ps4StartupImagePath: ps4StartupImagesFolder: ps4IconImagesFolder: ps4SaveDataImagePath: ps4SdkOverride: ps4BGMPath: ps4ShareFilePath: ps4ShareOverlayImagePath: ps4PrivacyGuardImagePath: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 ps4RemotePlayKeyMappingDir: ps4PlayTogetherPlayerCount: 0 ps4EnterButtonAssignment: 1 ps4ApplicationParam1: 0 ps4ApplicationParam2: 0 ps4ApplicationParam3: 0 ps4ApplicationParam4: 0 ps4DownloadDataSize: 0 ps4GarlicHeapSize: 2048 ps4ProGarlicHeapSize: 2560 ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ ps4pnSessions: 1 ps4pnPresence: 1 ps4pnFriends: 1 ps4pnGameCustomData: 1 playerPrefsSupport: 0 enableApplicationExit: 0 restrictedAudioUsageRights: 0 ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 ps4UseAudio3dBackend: 0 ps4SocialScreenEnabled: 0 ps4ScriptOptimizationLevel: 0 ps4Audio3dVirtualSpeakerCount: 14 ps4attribCpuUsage: 0 ps4PatchPkgPath: ps4PatchLatestPkgPath: ps4PatchChangeinfoPath: ps4PatchDayOne: 0 ps4attribUserManagement: 0 ps4attribMoveSupport: 0 ps4attrib3DSupport: 0 ps4attribShareSupport: 0 ps4attribExclusiveVR: 0 ps4disableAutoHideSplash: 0 ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] monoEnv: psp2Splashimage: {fileID: 0} psp2NPTrophyPackPath: psp2NPSupportGBMorGJP: 0 psp2NPAgeRating: 12 psp2NPTitleDatPath: psp2NPCommsID: psp2NPCommunicationsID: psp2NPCommsPassphrase: psp2NPCommsSig: psp2ParamSfxPath: psp2ManualPath: psp2LiveAreaGatePath: psp2LiveAreaBackroundPath: psp2LiveAreaPath: psp2LiveAreaTrialPath: psp2PatchChangeInfoPath: psp2PatchOriginalPackage: psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui psp2KeystoneFile: psp2MemoryExpansionMode: 0 psp2DRMType: 0 psp2StorageType: 0 psp2MediaCapacity: 0 psp2DLCConfigPath: psp2ThumbnailPath: psp2BackgroundPath: psp2SoundPath: psp2TrophyCommId: psp2TrophyPackagePath: psp2PackagedResourcesPath: psp2SaveDataQuota: 10240 psp2ParentalLevel: 1 psp2ShortTitle: Not Set psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF psp2Category: 0 psp2MasterVersion: 01.00 psp2AppVersion: 01.00 psp2TVBootMode: 0 psp2EnterButtonAssignment: 2 psp2TVDisableEmu: 0 psp2AllowTwitterDialog: 1 psp2Upgradable: 0 psp2HealthWarning: 0 psp2UseLibLocation: 0 psp2InfoBarOnStartup: 0 psp2InfoBarColor: 0 psp2ScriptOptimizationLevel: 0 splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} spritePackerPolicy: webGLMemorySize: 256 webGLExceptionSupport: 1 webGLNameFilesAsHashes: 0 webGLDataCaching: 0 webGLDebugSymbols: 0 webGLEmscriptenArgs: webGLModulesDirectory: webGLTemplate: APPLICATION:Default webGLAnalyzeBuildSize: 0 webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 webGLLinkerTarget: 0 scriptingDefineSymbols: {} platformArchitecture: {} scriptingBackend: Android: 0 Metro: 2 Standalone: 0 WebPlayer: 0 il2cppCompilerConfiguration: {} incrementalIl2cppBuild: {} allowUnsafeCode: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 m_MobileRenderingPath: 1 metroPackageName: ArucoUnity metroPackageVersion: metroCertificatePath: metroCertificatePassword: metroCertificateSubject: metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 metroApplicationDescription: ArucoUnity wsaImages: {} metroTileShortName: metroCommandLineArgsFile: metroTileShowName: 0 metroMediumTileShowName: 0 metroLargeTileShowName: 0 metroWideTileShowName: 0 metroDefaultTileSize: 1 metroTileForegroundText: 1 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: metroCompilationOverrides: 1 tizenProductDescription: tizenProductURL: tizenSigningProfileName: tizenGPSPermissions: 0 tizenMicrophonePermissions: 0 tizenDeploymentTarget: tizenDeploymentTargetType: -1 tizenMinOSVersion: 1 n3dsUseExtSaveData: 0 n3dsCompressStaticMem: 1 n3dsExtSaveDataNumber: 0x12345 n3dsStackSize: 131072 n3dsTargetPlatform: 2 n3dsRegion: 7 n3dsMediaSize: 0 n3dsLogoStyle: 3 n3dsTitle: GameName n3dsProductCode: n3dsApplicationId: 0xFF3FF XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: XboxOneContentId: XboxOneTitleId: XboxOneSCId: XboxOneGameOsOverridePath: XboxOnePackagingOverridePath: XboxOneAppManifestOverridePath: XboxOnePackageEncryption: 0 XboxOnePackageUpdateGranularity: 2 XboxOneDescription: XboxOneLanguage: - enus XboxOneCapability: [] XboxOneGameRating: {} XboxOneIsContentPackage: 0 XboxOneEnableGPUVariability: 0 XboxOneSockets: {} XboxOneSplashScreen: {fileID: 0} XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 xboxOneScriptCompiler: 0 vrEditorSettings: daydream: daydreamIconForeground: {fileID: 0} daydreamIconBackground: {fileID: 0} cloudServicesEnabled: Analytics: 0 Build: 0 Collab: 0 ErrorHub: 0 Game_Performance: 0 Hub: 0 Purchasing: 0 UNet: 0 Unity_Ads: 0 facebookSdkVersion: 7.9.4 apiCompatibilityLevel: 2 cloudProjectId: projectName: organizationId: cloudEnabled: 0 enableNativePlatformBackendsForNewInputSystem: 0 disableOldInputManagerSupport: 0 ================================================ FILE: ProjectSettings/ProjectVersion.txt ================================================ m_EditorVersion: 2017.4.14f1 ================================================ FILE: ProjectSettings/QualitySettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!47 &1 QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 m_CurrentQuality: 5 m_QualitySettings: - serializedVersion: 2 name: Fastest pixelLightCount: 0 shadows: 0 shadowResolution: 0 shadowProjection: 1 shadowCascades: 1 shadowDistance: 15 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 blendWeights: 1 textureQuality: 1 anisotropicTextures: 0 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 vSyncCount: 0 lodBias: 0.3 maximumLODLevel: 0 particleRaycastBudget: 4 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Fast pixelLightCount: 0 shadows: 0 shadowResolution: 0 shadowProjection: 1 shadowCascades: 1 shadowDistance: 20 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 blendWeights: 2 textureQuality: 0 anisotropicTextures: 0 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 vSyncCount: 0 lodBias: 0.4 maximumLODLevel: 0 particleRaycastBudget: 16 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Simple pixelLightCount: 1 shadows: 1 shadowResolution: 0 shadowProjection: 1 shadowCascades: 1 shadowDistance: 20 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 blendWeights: 2 textureQuality: 0 anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 vSyncCount: 1 lodBias: 0.7 maximumLODLevel: 0 particleRaycastBudget: 64 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Good pixelLightCount: 2 shadows: 2 shadowResolution: 1 shadowProjection: 1 shadowCascades: 2 shadowDistance: 40 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 blendWeights: 2 textureQuality: 0 anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 1 maximumLODLevel: 0 particleRaycastBudget: 256 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Beautiful pixelLightCount: 3 shadows: 2 shadowResolution: 2 shadowProjection: 1 shadowCascades: 2 shadowDistance: 70 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 blendWeights: 4 textureQuality: 0 anisotropicTextures: 2 antiAliasing: 2 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 1.5 maximumLODLevel: 0 particleRaycastBudget: 1024 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - serializedVersion: 2 name: Fantastic pixelLightCount: 4 shadows: 2 shadowResolution: 2 shadowProjection: 1 shadowCascades: 4 shadowDistance: 150 shadowNearPlaneOffset: 2 shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 blendWeights: 4 textureQuality: 0 anisotropicTextures: 2 antiAliasing: 2 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 vSyncCount: 1 lodBias: 2 maximumLODLevel: 0 particleRaycastBudget: 4096 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] m_PerPlatformDefaultQuality: Android: 2 Nintendo 3DS: 5 PS3: 5 PS4: 5 PSM: 5 PSP2: 2 Samsung TV: 2 Standalone: 5 Tizen: 2 Web: 5 WebGL: 3 WiiU: 5 Windows Store Apps: 5 XBOX360: 5 XboxOne: 5 iPhone: 2 tvOS: 5 ================================================ FILE: ProjectSettings/TagManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!78 &1 TagManager: serializedVersion: 2 tags: [] layers: - Default - TransparentFX - Ignore Raycast - - Water - UI - - - ArucoCameraBackground - ArucoCameraStereoBackground1 - ArucoCameraStereoBackground2 - - - - - - - - - - - - - - - - - - - - - m_SortingLayers: - name: Default uniqueID: 0 locked: 0 ================================================ FILE: ProjectSettings/TimeManager.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!5 &1 TimeManager: m_ObjectHideFlags: 0 Fixed Timestep: 0.02 Maximum Allowed Timestep: 0.33333334 m_TimeScale: 1 Maximum Particle Timestep: 0.03 ================================================ FILE: ProjectSettings/UnityConnectSettings.asset ================================================ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!310 &1 UnityConnectSettings: m_ObjectHideFlags: 0 m_Enabled: 0 m_TestMode: 0 m_TestEventUrl: m_TestConfigUrl: m_TestInitMode: 0 CrashReportingSettings: m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate m_Enabled: 0 m_CaptureEditorExceptions: 1 UnityPurchasingSettings: m_Enabled: 0 m_TestMode: 0 UnityAnalyticsSettings: m_Enabled: 0 m_InitializeOnStartup: 1 m_TestMode: 0 m_TestEventUrl: m_TestConfigUrl: UnityAdsSettings: m_Enabled: 0 m_InitializeOnStartup: 1 m_TestMode: 0 m_IosGameId: m_AndroidGameId: m_GameIds: {} m_GameId: PerformanceReportingSettings: m_Enabled: 0 ================================================ FILE: README.md ================================================ # ArucoUnity Bring augmented reality to Unity by tracking [ArUco markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html) in real time. Standard mono cameras, such as webcams, but also stereo cameras and fisheye lenses are supported. ![Demo 1](https://normanderwan.github.io/ArucoUnity/images/ar_roll_a_ball.gif) ![Demo 2](https://normanderwan.github.io/ArucoUnity/images/extended_phone_screen.gif) *Left: AR [Roll a ball](https://unity3d.com/fr/learn/tutorials/s/roll-ball-tutorial). Right: The markers tracking* *allows to extend the phone's screen.* ## Install Get ArucoUnity: 1. Download the [latest build release](https://github.com/NormandErwan/ArucoUnity/releases). Or see the [Build From Sources](https://normanderwan.github.io/ArucoUnity/manual/build-from-sources.html) documentation page. 2. Import `ArucoUnity.package` in your Unity project. Get ArucoUnityPlugin (C bindings to OpenCV): 1. Download the [latest build release](https://github.com/NormandErwan/ArucoUnityPlugin/releases) corresponding to your platform. Windows and Linux x64 only are supported (see issue [#6](https://github.com/NormandErwan/ArucoUnity/issues/6)). 2. Copy the `Assets/` folder to your Unity project. ## Usage 1. [Create Markers](https://normanderwan.github.io/ArucoUnity/manual/create-markers.html), print and place them in the environment. 2. [Calibrate a Camera](https://normanderwan.github.io/ArucoUnity/manual/calibrate-a-camera.html) using a calibration board. 3. [Track Markers](https://normanderwan.github.io/ArucoUnity/manual/track-markers.html). See the documentation online for details: [https://normanderwan.github.io/ArucoUnity/](https://normanderwan.github.io/ArucoUnity). ## Contributing For any question or comment, please [open a new issue](https://github.com/NormandErwan/ArucoUnity/issues/new). If you'd like to contribute, please [fork the repository](https://github.com/NormandErwan/ArucoUnity/fork) and use a feature branch. Pull requests are warmly welcome. ## Support The first version of this project has been developed as part of the master thesis of [Erwan Normand](https://linkedin.com/in/normanderwan) and was supported by the [ÉTS - École de Technologie Supérieure](https://www.etsmtl.ca). I'm developing the second version on my own. If this project helped you, please consider buying me a coffee in return :) [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/white_img.png)](https://www.buymeacoffee.com/h48VU3fny) ## Licenses See the [LICENSE](https://github.com/NormandErwan/ArucoUnity/blob/master/LICENSE) file for license rights and limitations (3-clause BSD license). See [https://github.com/NormandErwan/ArucoUnityPlugin/tree/master/3rdparty](https://github.com/NormandErwan/ArucoUnityPlugin/tree/master/3rdparty) for the OpenCV license. ArucoUnity uses the following OpenCV modules: - [ArUco marker detection (aruco)](http://docs.opencv.org/3.4/d9/d6a/group__aruco.html) - [Camera Calibration and 3D Reconstruction (calib3d)](http://docs.opencv.org/3.4/d9/d0c/group__calib3d.html) - [Custom Calibration Pattern for 3D reconstruction (ccalib)](http://docs.opencv.org/3.4/d3/ddc/group__ccalib.html)