OvrvisionSDK  2.00
ovrvision_ar.h
1 // ovrvision_ar.h
2 // Version 1.62 : 22/Mar/2016
3 //
4 //MIT License
5 //THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6 //IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7 //FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
8 //AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
9 //LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
10 //OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
11 //THE SOFTWARE.
12 //
13 // Oculus Rift : TM & Copyright Oculus VR, Inc. All Rights Reserved
14 // Unity : TM & Copyright Unity Technologies. All Rights Reserved
15 
16 #ifndef __OVRVISION_AR__
17 #define __OVRVISION_AR__
18 
20 
21 #pragma warning (disable : 4251)
22 #pragma warning (disable : 4290)
23 
24 //Pratform header
25 #ifdef WIN32
26 #ifndef _WIN32_WINNT
27 #define _WIN32_WINNT 0x400
28 #endif
29 #include <windows.h>
30 #endif /*WIN32*/
31 
32 #ifdef MACOSX
33 
34 #endif /*MACOSX*/
35 
36 #ifdef LINUX
37 
38 #endif /*LINUX*/
39 
40 //Common header
41 #include <stdlib.h>
42 #include <stdio.h>
43 #include <math.h>
44 #include <string.h>
45 #include <vector>
46 
47 //Marker
48 #ifdef _OVRVISION_EXPORTS
49 #include <aruco.h>
50 #include <opencv2/opencv.hpp>
51 typedef aruco::MarkerDetector MarkerDetector;
52 typedef aruco::Marker Marker;
53 typedef aruco::CameraParameters CameraParameters;
54 typedef cv::Mat ovMat;
55 #else
56 #define MarkerDetector void
57 #define Marker void
58 #define CameraParameters void
59 #define ovMat void
60 #endif
61 
62 //OVR Group
63 namespace OVR {
64 
66 
67 #ifdef WIN32
68  #ifdef _OVRVISION_EXPORTS
69  #define OVRPORT __declspec(dllexport)
70  #else
71  #define OVRPORT __declspec(dllimport)
72  #endif
73 #endif /*WIN32*/
74 
75 #ifdef MACOSX
76  #define OVRPORT
77 #endif /*MACOSX*/
78 
79 #ifdef LINUX
80  #define OVRPORT
81 #endif /*LINUX*/
82 
83 #ifndef _OV_CAMEYE_ENUM_
84 #define _OV_CAMEYE_ENUM_
85  typedef enum ov_cameraeye {
88  OV_CAMEYE_LEFT = 0,
91  } Cameye;
92 #endif
93 
95 typedef struct OVRPORT ov_st_vector2d {
96  union {
97  float v[2];
98  struct {
99  float x;
100  float y;
101  };
102  };
103 } OvVector2D;
104 
106 typedef struct OVRPORT ov_st_vector3d {
107  union {
108  float v[3];
109  struct {
110  float x;
111  float y;
112  float z;
113  };
114  };
115 } OvVector3D;
116 
118 typedef struct OVRPORT ov_st_vector4d {
119  union {
120  float v[4];
121  struct {
122  float x;
123  float y;
124  float z;
125  float w;
126  };
127  };
128 } OvVector4D;
129 
131 typedef struct OVRPORT ov_st_marker_data {
132  int id;
136 } OvMarkerData;
137 
138 //unsigned char to byte
139 typedef unsigned char byte;
140 
141 //Result define
142 #define OV_RESULT_OK (0)
143 #define OV_RESULT_FAILED (1)
144 
145 
148 class OVRPORT OvrvisionAR
149 {
150 public:
151  //Constructor/Destructor
157  OvrvisionAR(float markersize_meter, int w, int h, float focalPoint);
159  ~OvrvisionAR();
160 
161  //Methods
162 
165  void SetImageBGRA(unsigned char* pImage);
168  void SetImageOpenCVImage(ovMat* pImageMat);
170  void Render();
171 
174  int GetMarkerDataSize();
177  OVR::OvMarkerData* GetMarkerData();
181  OVR::OvMarkerData* GetMarkerData(int idx);
182 
185  void SetMarkerSizeMeter(float value) { m_markerSize_Meter = value; };
188  float GetMarkerSizeMeter(){ return m_markerSize_Meter; };
189 
192  void SetDetectThreshold(float value) { m_threshold = value; };
195  float GetDetectThreshold(){ return m_threshold; };
196 
197  //Reserved method.
198  void SetInstantTraking(bool value);
199 
200 private:
201  //Marker detector
202  MarkerDetector* m_detector;
203  CameraParameters* m_cameraParam;
204  float m_threshold;
205  //Marker size
206  float m_markerSize_Meter;
207 
208  //Marker data
209  OVR::OvMarkerData* m_pMarkerData;
210  int m_markerDataSize;
211 
212  //Set image infomation
213  byte* m_pImageSrc; //image pointer
214  ovMat* m_pImageOpenCVMat; //opencv type image
215  int m_width; //width
216  int m_height; //height
217  bool m_isReady;
218 
219  //Private Methods
220  //Rotation Matrix to Quaternion
221  void RotMatToQuaternion(OvVector4D* outQuat, const float* inMat);
222  //Multiply Quaternion
223  OvVector4D MultiplyQuaternion(OvVector4D* a, OvVector4D* b);
224 };
225 
226 };
227 
228 #endif /*__OVRVISION_AR__*/
Vector3D structure for ov_st_marker_data.
Definition: ovrvision_ar.h:106
OvVector3D translate
MarkerID.
Definition: ovrvision_ar.h:133
struct OVRPORT OVR::ov_st_vector2d OvVector2D
Vector2D structure for ov_st_marker_data.
void SetDetectThreshold(float value)
Set the Threashold value.
Definition: ovrvision_ar.h:192
ov_cameraeye
Definition: ovrvision_ar.h:87
OvrvisionSDK Group.
Definition: ovrvision_ar.h:63
Vector2D structure for ov_st_marker_data.
Definition: ovrvision_ar.h:95
struct OVRPORT OVR::ov_st_vector3d OvVector3D
Vector3D structure for ov_st_marker_data.
Vector4D structure for ov_st_marker_data.
Definition: ovrvision_ar.h:118
OvVector2D centerPtOfImage
Rotation data.
Definition: ovrvision_ar.h:135
struct OVRPORT OVR::ov_st_marker_data OvMarkerData
Ovrvision AR Marker data structure.
float GetMarkerSizeMeter()
Get the actual size of AR marker.
Definition: ovrvision_ar.h:188
void SetMarkerSizeMeter(float value)
Setup the actual size of AR marker.
Definition: ovrvision_ar.h:185
Right camera.
Definition: ovrvision_ar.h:90
OvrvisionPro AR class.
Definition: ovrvision_ar.h:148
OvVector4D quaternion
Position data.
Definition: ovrvision_ar.h:134
float GetDetectThreshold()
Get the Threashold value.
Definition: ovrvision_ar.h:195
Ovrvision AR Marker data structure.
Definition: ovrvision_ar.h:131
Left camera.
Definition: ovrvision_ar.h:89
struct OVRPORT OVR::ov_st_vector4d OvVector4D
Vector4D structure for ov_st_marker_data.