Change to using doubles in XR classes
This commit is contained in:
parent
dc2b062609
commit
c527078634
|
@ -244,59 +244,59 @@ void MobileVRInterface::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "k2", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k2", "get_k2");
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "k2", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k2", "get_k2");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MobileVRInterface::set_eye_height(const real_t p_eye_height) {
|
void MobileVRInterface::set_eye_height(const double p_eye_height) {
|
||||||
eye_height = p_eye_height;
|
eye_height = p_eye_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t MobileVRInterface::get_eye_height() const {
|
double MobileVRInterface::get_eye_height() const {
|
||||||
return eye_height;
|
return eye_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MobileVRInterface::set_iod(const real_t p_iod) {
|
void MobileVRInterface::set_iod(const double p_iod) {
|
||||||
intraocular_dist = p_iod;
|
intraocular_dist = p_iod;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_iod() const {
|
double MobileVRInterface::get_iod() const {
|
||||||
return intraocular_dist;
|
return intraocular_dist;
|
||||||
};
|
};
|
||||||
|
|
||||||
void MobileVRInterface::set_display_width(const real_t p_display_width) {
|
void MobileVRInterface::set_display_width(const double p_display_width) {
|
||||||
display_width = p_display_width;
|
display_width = p_display_width;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_display_width() const {
|
double MobileVRInterface::get_display_width() const {
|
||||||
return display_width;
|
return display_width;
|
||||||
};
|
};
|
||||||
|
|
||||||
void MobileVRInterface::set_display_to_lens(const real_t p_display_to_lens) {
|
void MobileVRInterface::set_display_to_lens(const double p_display_to_lens) {
|
||||||
display_to_lens = p_display_to_lens;
|
display_to_lens = p_display_to_lens;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_display_to_lens() const {
|
double MobileVRInterface::get_display_to_lens() const {
|
||||||
return display_to_lens;
|
return display_to_lens;
|
||||||
};
|
};
|
||||||
|
|
||||||
void MobileVRInterface::set_oversample(const real_t p_oversample) {
|
void MobileVRInterface::set_oversample(const double p_oversample) {
|
||||||
oversample = p_oversample;
|
oversample = p_oversample;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_oversample() const {
|
double MobileVRInterface::get_oversample() const {
|
||||||
return oversample;
|
return oversample;
|
||||||
};
|
};
|
||||||
|
|
||||||
void MobileVRInterface::set_k1(const real_t p_k1) {
|
void MobileVRInterface::set_k1(const double p_k1) {
|
||||||
k1 = p_k1;
|
k1 = p_k1;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_k1() const {
|
double MobileVRInterface::get_k1() const {
|
||||||
return k1;
|
return k1;
|
||||||
};
|
};
|
||||||
|
|
||||||
void MobileVRInterface::set_k2(const real_t p_k2) {
|
void MobileVRInterface::set_k2(const double p_k2) {
|
||||||
k2 = p_k2;
|
k2 = p_k2;
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t MobileVRInterface::get_k2() const {
|
double MobileVRInterface::get_k2() const {
|
||||||
return k2;
|
return k2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -422,7 +422,7 @@ Transform3D MobileVRInterface::get_transform_for_view(uint32_t p_view, const Tra
|
||||||
return transform_for_eye;
|
return transform_for_eye;
|
||||||
};
|
};
|
||||||
|
|
||||||
CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
|
CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
|
||||||
_THREAD_SAFE_METHOD_
|
_THREAD_SAFE_METHOD_
|
||||||
|
|
||||||
CameraMatrix eye;
|
CameraMatrix eye;
|
||||||
|
|
|
@ -56,17 +56,17 @@ private:
|
||||||
Basis orientation;
|
Basis orientation;
|
||||||
|
|
||||||
// Just set some defaults for these. At some point we need to look at adding a lookup table for common device + headset combos and/or support reading cardboard QR codes
|
// Just set some defaults for these. At some point we need to look at adding a lookup table for common device + headset combos and/or support reading cardboard QR codes
|
||||||
float eye_height = 1.85;
|
double eye_height = 1.85;
|
||||||
uint64_t last_ticks = 0;
|
uint64_t last_ticks = 0;
|
||||||
|
|
||||||
real_t intraocular_dist = 6.0;
|
double intraocular_dist = 6.0;
|
||||||
real_t display_width = 14.5;
|
double display_width = 14.5;
|
||||||
real_t display_to_lens = 4.0;
|
double display_to_lens = 4.0;
|
||||||
real_t oversample = 1.5;
|
double oversample = 1.5;
|
||||||
|
|
||||||
real_t k1 = 0.215;
|
double k1 = 0.215;
|
||||||
real_t k2 = 0.215;
|
double k2 = 0.215;
|
||||||
real_t aspect = 1.0;
|
double aspect = 1.0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
logic for processing our sensor data, this was originally in our positional tracker logic but I think
|
logic for processing our sensor data, this was originally in our positional tracker logic but I think
|
||||||
|
@ -110,26 +110,26 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_eye_height(const real_t p_eye_height);
|
void set_eye_height(const double p_eye_height);
|
||||||
real_t get_eye_height() const;
|
double get_eye_height() const;
|
||||||
|
|
||||||
void set_iod(const real_t p_iod);
|
void set_iod(const double p_iod);
|
||||||
real_t get_iod() const;
|
double get_iod() const;
|
||||||
|
|
||||||
void set_display_width(const real_t p_display_width);
|
void set_display_width(const double p_display_width);
|
||||||
real_t get_display_width() const;
|
double get_display_width() const;
|
||||||
|
|
||||||
void set_display_to_lens(const real_t p_display_to_lens);
|
void set_display_to_lens(const double p_display_to_lens);
|
||||||
real_t get_display_to_lens() const;
|
double get_display_to_lens() const;
|
||||||
|
|
||||||
void set_oversample(const real_t p_oversample);
|
void set_oversample(const double p_oversample);
|
||||||
real_t get_oversample() const;
|
double get_oversample() const;
|
||||||
|
|
||||||
void set_k1(const real_t p_k1);
|
void set_k1(const double p_k1);
|
||||||
real_t get_k1() const;
|
double get_k1() const;
|
||||||
|
|
||||||
void set_k2(const real_t p_k2);
|
void set_k2(const double p_k2);
|
||||||
real_t get_k2() const;
|
double get_k2() const;
|
||||||
|
|
||||||
virtual StringName get_name() const override;
|
virtual StringName get_name() const override;
|
||||||
virtual uint32_t get_capabilities() const override;
|
virtual uint32_t get_capabilities() const override;
|
||||||
|
@ -144,7 +144,7 @@ public:
|
||||||
virtual uint32_t get_view_count() override;
|
virtual uint32_t get_view_count() override;
|
||||||
virtual Transform3D get_camera_transform() override;
|
virtual Transform3D get_camera_transform() override;
|
||||||
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
||||||
virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
|
virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
|
||||||
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
||||||
|
|
||||||
virtual void process() override;
|
virtual void process() override;
|
||||||
|
|
|
@ -341,7 +341,7 @@ Transform3D WebXRInterfaceJS::get_transform_for_view(uint32_t p_view, const Tran
|
||||||
return p_cam_transform * xr_server->get_reference_frame() * transform_for_eye;
|
return p_cam_transform * xr_server->get_reference_frame() * transform_for_eye;
|
||||||
};
|
};
|
||||||
|
|
||||||
CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
|
CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
|
||||||
CameraMatrix eye;
|
CameraMatrix eye;
|
||||||
|
|
||||||
float *js_matrix = godot_webxr_get_projection_for_eye(p_view + 1);
|
float *js_matrix = godot_webxr_get_projection_for_eye(p_view + 1);
|
||||||
|
|
|
@ -86,7 +86,7 @@ public:
|
||||||
virtual uint32_t get_view_count() override;
|
virtual uint32_t get_view_count() override;
|
||||||
virtual Transform3D get_camera_transform() override;
|
virtual Transform3D get_camera_transform() override;
|
||||||
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
||||||
virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
|
virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
|
||||||
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
||||||
|
|
||||||
virtual void process() override;
|
virtual void process() override;
|
||||||
|
|
|
@ -110,7 +110,7 @@ public:
|
||||||
virtual uint32_t get_view_count() = 0; /* returns the view count we need (1 is monoscopic, 2 is stereoscopic but can be more) */
|
virtual uint32_t get_view_count() = 0; /* returns the view count we need (1 is monoscopic, 2 is stereoscopic but can be more) */
|
||||||
virtual Transform3D get_camera_transform() = 0; /* returns the position of our camera for updating our camera node. For monoscopic this is equal to the views transform, for stereoscopic this should be an average */
|
virtual Transform3D get_camera_transform() = 0; /* returns the position of our camera for updating our camera node. For monoscopic this is equal to the views transform, for stereoscopic this should be an average */
|
||||||
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) = 0; /* get each views transform */
|
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) = 0; /* get each views transform */
|
||||||
virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) = 0; /* get each view projection matrix */
|
virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) = 0; /* get each view projection matrix */
|
||||||
|
|
||||||
// note, external color/depth/vrs texture support will be added here soon.
|
// note, external color/depth/vrs texture support will be added here soon.
|
||||||
|
|
||||||
|
|
|
@ -186,7 +186,7 @@ Transform3D XRInterfaceExtension::get_transform_for_view(uint32_t p_view, const
|
||||||
return Transform3D();
|
return Transform3D();
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
|
CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
|
||||||
CameraMatrix cm;
|
CameraMatrix cm;
|
||||||
PackedFloat64Array arr;
|
PackedFloat64Array arr;
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real
|
||||||
return CameraMatrix();
|
return CameraMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, float p_k1, float p_k2, float p_upscale, float p_aspect_ratio) {
|
void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, double p_k1, double p_k2, double p_upscale, double p_aspect_ratio) {
|
||||||
BlitToScreen blit;
|
BlitToScreen blit;
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(!can_add_blits, "add_blit can only be called from an XR plugin from within _commit_views!");
|
ERR_FAIL_COND_MSG(!can_add_blits, "add_blit can only be called from an XR plugin from within _commit_views!");
|
||||||
|
|
|
@ -83,15 +83,15 @@ public:
|
||||||
virtual uint32_t get_view_count() override;
|
virtual uint32_t get_view_count() override;
|
||||||
virtual Transform3D get_camera_transform() override;
|
virtual Transform3D get_camera_transform() override;
|
||||||
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
|
||||||
virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
|
virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
|
||||||
|
|
||||||
GDVIRTUAL0R(Size2, _get_render_target_size);
|
GDVIRTUAL0R(Size2, _get_render_target_size);
|
||||||
GDVIRTUAL0R(uint32_t, _get_view_count);
|
GDVIRTUAL0R(uint32_t, _get_view_count);
|
||||||
GDVIRTUAL0R(Transform3D, _get_camera_transform);
|
GDVIRTUAL0R(Transform3D, _get_camera_transform);
|
||||||
GDVIRTUAL2R(Transform3D, _get_transform_for_view, uint32_t, const Transform3D &);
|
GDVIRTUAL2R(Transform3D, _get_transform_for_view, uint32_t, const Transform3D &);
|
||||||
GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, real_t, real_t, real_t);
|
GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, double, double, double);
|
||||||
|
|
||||||
void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), float p_k1 = 0.0, float p_k2 = 0.0, float p_upscale = 1.0, float p_aspect_ratio = 1.0);
|
void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), double p_k1 = 0.0, double p_k2 = 0.0, double p_upscale = 1.0, double p_aspect_ratio = 1.0);
|
||||||
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
|
||||||
GDVIRTUAL2(_commit_views, RID, const Rect2 &);
|
GDVIRTUAL2(_commit_views, RID, const Rect2 &);
|
||||||
|
|
||||||
|
|
|
@ -86,11 +86,11 @@ void XRServer::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING_NAME, "tracker_name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id")));
|
ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING_NAME, "tracker_name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id")));
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t XRServer::get_world_scale() const {
|
double XRServer::get_world_scale() const {
|
||||||
return world_scale;
|
return world_scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
void XRServer::set_world_scale(real_t p_world_scale) {
|
void XRServer::set_world_scale(double p_world_scale) {
|
||||||
if (p_world_scale < 0.01) {
|
if (p_world_scale < 0.01) {
|
||||||
p_world_scale = 0.01;
|
p_world_scale = 0.01;
|
||||||
} else if (p_world_scale > 1000.0) {
|
} else if (p_world_scale > 1000.0) {
|
||||||
|
|
|
@ -81,7 +81,7 @@ private:
|
||||||
|
|
||||||
Ref<XRInterface> primary_interface; /* we'll identify one interface as primary, this will be used by our viewports */
|
Ref<XRInterface> primary_interface; /* we'll identify one interface as primary, this will be used by our viewports */
|
||||||
|
|
||||||
real_t world_scale; /* scale by which we multiply our tracker positions */
|
double world_scale; /* scale by which we multiply our tracker positions */
|
||||||
Transform3D world_origin; /* our world origin point, maps a location in our virtual world to the origin point in our real world tracking volume */
|
Transform3D world_origin; /* our world origin point, maps a location in our virtual world to the origin point in our real world tracking volume */
|
||||||
Transform3D reference_frame; /* our reference frame */
|
Transform3D reference_frame; /* our reference frame */
|
||||||
|
|
||||||
|
@ -107,8 +107,8 @@ public:
|
||||||
|
|
||||||
I may remove access to this property in GDScript in favour of exposing it on the XROrigin3D node
|
I may remove access to this property in GDScript in favour of exposing it on the XROrigin3D node
|
||||||
*/
|
*/
|
||||||
real_t get_world_scale() const;
|
double get_world_scale() const;
|
||||||
void set_world_scale(real_t p_world_scale);
|
void set_world_scale(double p_world_scale);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The world maps the 0,0,0 coordinate of our real world coordinate system for our tracking volume to a location in our
|
The world maps the 0,0,0 coordinate of our real world coordinate system for our tracking volume to a location in our
|
||||||
|
|
Loading…
Reference in New Issue