Changeset 230428 in webkit
- Timestamp:
- Apr 9, 2018 7:40:51 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r230390 r230428 1 2018-04-03 Sergio Villar Senin <svillar@igalia.com> 2 3 [OpenVR][WebVR] Retrieve FrameData in WebVR's rAF 4 https://bugs.webkit.org/show_bug.cgi?id=184265 5 6 Reviewed by Žan Doberšek. 7 8 VRFrameData contains all the required information to properly render a VR scene like view 9 and projection matrices, pose data (position & orientation) and linear & angular velocity 10 among others. The getFrameData() call must be issued inside a WebVR's own 11 requestAnimationFrame. 12 13 * Modules/webvr/VRDisplay.cpp: 14 (WebCore::VRDisplay::getFrameData const): 15 (WebCore::VRDisplay::getPose const): 16 (WebCore::VRDisplay::requestAnimationFrame): 17 (WebCore::VRDisplay::cancelAnimationFrame): 18 * Modules/webvr/VRDisplay.h: 19 * Modules/webvr/VREyeParameters.h: 20 (WebCore::VREyeParameters::rawOffset const): Required to compute view matrices. 21 * Modules/webvr/VRFrameData.cpp: 22 (WebCore::matrixToArray): 23 (WebCore::VRFrameData::leftProjectionMatrix const): 24 (WebCore::VRFrameData::leftViewMatrix const): 25 (WebCore::VRFrameData::rightProjectionMatrix const): 26 (WebCore::VRFrameData::rightViewMatrix const): 27 (WebCore::projectionMatrixFromFieldOfView): 28 (WebCore::rotationMatrixFromQuaternion): 29 (WebCore::applyHeadToEyeTransform): 30 (WebCore::VRFrameData::update): 31 (WebCore::VRFrameData::timestamp const): Deleted. 32 * Modules/webvr/VRFrameData.h: 33 (WebCore::VRFrameData::timestamp const): 34 * Modules/webvr/VRPose.cpp: 35 (WebCore::optionalFloat3ToJSCArray): 36 (WebCore::VRPose::position const): 37 (WebCore::VRPose::linearVelocity const): 38 (WebCore::VRPose::linearAcceleration const): 39 (WebCore::VRPose::orientation const): 40 (WebCore::VRPose::angularVelocity const): 41 (WebCore::VRPose::angularAcceleration const): 42 * Modules/webvr/VRPose.h: 43 (WebCore::VRPose::create): 44 (WebCore::VRPose::update): 45 (WebCore::VRPose::VRPose): 46 * platform/vr/VRPlatformDisplay.h: 47 (WebCore::VRPlatformTrackingInfo::Quaternion::Quaternion): 48 (WebCore::VRPlatformTrackingInfo::Quaternion::conjugate): 49 (WebCore::VRPlatformTrackingInfo::Quaternion::operator*): 50 (WebCore::VRPlatformTrackingInfo::Float3::Float3): Just a group of 3 floats used to store 51 both velocity and acceleration in a format which is very convenient to later generate JSC 52 arrays. 53 (WebCore::VRPlatformTrackingInfo::clear): 54 * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp: 55 (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR): 56 (WebCore::rotationMatrixToQuaternion): 57 (WebCore::VRPlatformDisplayOpenVR::getTrackingInfo): 58 * platform/vr/openvr/VRPlatformDisplayOpenVR.h: 59 1 60 2018-04-09 Michael Catanzaro <mcatanzaro@igalia.com> 2 61 -
trunk/Source/WebCore/Modules/webvr/VRDisplay.cpp
r229089 r230428 27 27 #include "VRDisplay.h" 28 28 29 #include "Chrome.h" 30 #include "Page.h" 31 #include "ScriptedAnimationController.h" 29 32 #include "VRDisplayCapabilities.h" 30 33 #include "VREyeParameters.h" 34 #include "VRFrameData.h" 31 35 #include "VRLayerInit.h" 32 36 #include "VRPlatformDisplay.h" … … 86 90 } 87 91 88 bool VRDisplay::getFrameData(VRFrameData& ) const92 bool VRDisplay::getFrameData(VRFrameData& frameData) const 89 93 { 90 return false; 94 if (!m_capabilities->hasPosition() || !m_capabilities->hasOrientation()) 95 return false; 96 97 // FIXME: ensure that this is only called inside WebVR's rAF. 98 frameData.update(m_display->getTrackingInfo(), getEyeParameters(VREye::Left), getEyeParameters(VREye::Right), m_depthNear, m_depthFar); 99 return true; 91 100 } 92 101 93 102 Ref<VRPose> VRDisplay::getPose() const 94 103 { 95 return VRPose::create( );104 return VRPose::create(m_display->getTrackingInfo()); 96 105 } 97 106 … … 100 109 } 101 110 102 long VRDisplay::requestAnimationFrame(Ref<RequestAnimationFrameCallback>&&)111 uint32_t VRDisplay::requestAnimationFrame(Ref<RequestAnimationFrameCallback>&& callback) 103 112 { 104 return 0; 113 if (!m_scriptedAnimationController) { 114 auto* document = downcast<Document>(scriptExecutionContext()); 115 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) 116 // FIXME: Get the display id of the HMD as it should use the HMD native refresh rate. 117 PlatformDisplayID displayID = document->page() ? document->page()->chrome().displayID() : 0; 118 m_scriptedAnimationController = ScriptedAnimationController::create(*document, displayID); 119 #else 120 m_scriptedAnimationController = ScriptedAnimationController::create(*document, 0); 121 #endif 122 } 123 124 return m_scriptedAnimationController->registerCallback(WTFMove(callback)); 105 125 } 106 126 107 void VRDisplay::cancelAnimationFrame(u nsigned)127 void VRDisplay::cancelAnimationFrame(uint32_t id) 108 128 { 129 if (!m_scriptedAnimationController) 130 return; 131 132 m_scriptedAnimationController->cancelCallback(id); 109 133 } 110 134 -
trunk/Source/WebCore/Modules/webvr/VRDisplay.h
r229014 r230428 35 35 36 36 class RequestAnimationFrameCallback; 37 class ScriptedAnimationController; 37 38 class VRDisplayCapabilities; 38 39 class VREyeParameters; … … 73 74 void setDepthFar(double depthFar) { m_depthFar = depthFar; } 74 75 75 longrequestAnimationFrame(Ref<RequestAnimationFrameCallback>&&);76 void cancelAnimationFrame(u nsigned);76 uint32_t requestAnimationFrame(Ref<RequestAnimationFrameCallback>&&); 77 void cancelAnimationFrame(uint32_t); 77 78 78 79 void requestPresent(const Vector<VRLayerInit>&, Ref<DeferredPromise>&&); … … 112 113 double m_depthNear { 0.01 }; // Default value from the specs. 113 114 double m_depthFar { 10000 }; // Default value from the specs. 115 116 RefPtr<ScriptedAnimationController> m_scriptedAnimationController; 114 117 }; 115 118 -
trunk/Source/WebCore/Modules/webvr/VREyeParameters.h
r228819 r230428 44 44 45 45 Ref<Float32Array> offset() const; 46 const FloatPoint3D& rawOffset() const { return m_offset; } 46 47 47 48 const VRFieldOfView& fieldOfView() const; -
trunk/Source/WebCore/Modules/webvr/VRFrameData.cpp
r221966 r230428 26 26 #include "VRFrameData.h" 27 27 28 #include "VREyeParameters.h" 29 #include "VRPlatformDisplay.h" 28 30 #include "VRPose.h" 29 31 … … 35 37 } 36 38 37 double VRFrameData::timestamp() const 39 static Ref<Float32Array> matrixToArray(const TransformationMatrix& matrix) 38 40 { 39 return 0; 41 TransformationMatrix::FloatMatrix4 columnMajorMatrix; 42 matrix.toColumnMajorFloatArray(columnMajorMatrix); 43 return Float32Array::create(columnMajorMatrix, 16).releaseNonNull(); 40 44 } 41 45 42 Float32Array*VRFrameData::leftProjectionMatrix() const46 Ref<Float32Array> VRFrameData::leftProjectionMatrix() const 43 47 { 44 return nullptr;48 return matrixToArray(m_leftProjectionMatrix); 45 49 } 46 50 47 Float32Array*VRFrameData::leftViewMatrix() const51 Ref<Float32Array> VRFrameData::leftViewMatrix() const 48 52 { 49 return nullptr;53 return matrixToArray(m_leftViewMatrix); 50 54 } 51 55 52 Float32Array*VRFrameData::rightProjectionMatrix() const56 Ref<Float32Array> VRFrameData::rightProjectionMatrix() const 53 57 { 54 return nullptr;58 return matrixToArray(m_rightProjectionMatrix); 55 59 } 56 60 57 Float32Array*VRFrameData::rightViewMatrix() const61 Ref<Float32Array> VRFrameData::rightViewMatrix() const 58 62 { 59 return nullptr;63 return matrixToArray(m_rightViewMatrix); 60 64 } 61 65 … … 65 69 } 66 70 71 static TransformationMatrix projectionMatrixFromFieldOfView(const VRFieldOfView& fov, double depthNear, double depthFar) 72 { 73 double upTan = tan(deg2rad(fov.upDegrees())); 74 double downTan = tan(deg2rad(fov.downDegrees())); 75 double leftTan = tan(deg2rad(fov.leftDegrees())); 76 double rightTan = tan(deg2rad(fov.rightDegrees())); 77 78 double xScale = 2 / (leftTan + rightTan); 79 double yScale = 2 / (upTan + downTan); 80 81 TransformationMatrix projectionMatrix; 82 projectionMatrix.setM11(xScale); 83 projectionMatrix.setM22(yScale); 84 projectionMatrix.setM32((upTan - downTan) * yScale * 0.5); 85 projectionMatrix.setM31(-((leftTan - rightTan) * xScale * 0.5)); 86 projectionMatrix.setM33((depthNear + depthFar) / (depthNear - depthFar)); 87 projectionMatrix.setM34(-1); 88 projectionMatrix.setM43((2 * depthFar * depthNear) / (depthNear - depthFar)); 89 projectionMatrix.setM44(0); 90 91 return projectionMatrix; 92 } 93 94 // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/index.htm 95 static TransformationMatrix rotationMatrixFromQuaternion(const VRPlatformTrackingInfo::Quaternion& quaternion) 96 { 97 double magnitude = (quaternion.x * quaternion.x) + (quaternion.y * quaternion.y) + (quaternion.z * quaternion.z) + (quaternion.w * quaternion.w); 98 VRPlatformTrackingInfo::Quaternion normalizedQuaternion(quaternion.x / magnitude, quaternion.y / magnitude, quaternion.z / magnitude, quaternion.w / magnitude); 99 double x2 = normalizedQuaternion.x * normalizedQuaternion.x; 100 double y2 = normalizedQuaternion.y * normalizedQuaternion.y; 101 double z2 = normalizedQuaternion.z * normalizedQuaternion.z; 102 double w2 = normalizedQuaternion.w * normalizedQuaternion.w; 103 double xy = normalizedQuaternion.x * normalizedQuaternion.y; 104 double zw = normalizedQuaternion.z * normalizedQuaternion.w; 105 double xz = normalizedQuaternion.x * normalizedQuaternion.z; 106 double yw = normalizedQuaternion.y * normalizedQuaternion.w; 107 double yz = normalizedQuaternion.y * normalizedQuaternion.z; 108 double xw = normalizedQuaternion.x * normalizedQuaternion.w; 109 110 return TransformationMatrix( 111 x2 - y2 - z2 + w2, 2.0 * (xy - zw), 2.0 * (xz + yw), 0, 112 2.0 * (xy + zw), -x2 + y2 - z2 + w2, 2.0 * (yz - xw), 0, 113 2.0 * (xz - yw), 2.0 * (yz + xw), -x2 - y2 + z2 + w2, 0, 114 0, 0, 0, 1); 115 } 116 117 static void applyHeadToEyeTransform(TransformationMatrix& matrix, const FloatPoint3D& translation) 118 { 119 matrix.setM41(matrix.m41() - translation.x()); 120 matrix.setM42(matrix.m42() - translation.y()); 121 matrix.setM43(matrix.m43() - translation.z()); 122 } 123 124 void VRFrameData::update(const VRPlatformTrackingInfo& trackingInfo, const VREyeParameters& leftEye, const VREyeParameters& rightEye, double depthNear, double depthFar) 125 { 126 m_leftProjectionMatrix = projectionMatrixFromFieldOfView(leftEye.fieldOfView(), depthNear, depthFar); 127 m_rightProjectionMatrix = projectionMatrixFromFieldOfView(rightEye.fieldOfView(), depthNear, depthFar); 128 129 m_timestamp = trackingInfo.timestamp; 130 m_pose->update(trackingInfo); 131 132 auto rotationMatrix = rotationMatrixFromQuaternion(trackingInfo.orientation.value_or(VRPlatformTrackingInfo::Quaternion(0, 0, 0, 1))); 133 FloatPoint3D position = trackingInfo.position.value_or(FloatPoint3D(0, 0, 0)); 134 rotationMatrix.translate3d(-position.x(), -position.y(), -position.z()); 135 136 m_leftViewMatrix = rotationMatrix; 137 applyHeadToEyeTransform(m_leftViewMatrix, leftEye.rawOffset()); 138 139 m_rightViewMatrix = rotationMatrix; 140 applyHeadToEyeTransform(m_rightViewMatrix, rightEye.rawOffset()); 141 } 142 67 143 } // namespace WebCore -
trunk/Source/WebCore/Modules/webvr/VRFrameData.h
r228218 r230428 25 25 #pragma once 26 26 27 #include "TransformationMatrix.h" 27 28 #include <JavaScriptCore/Float32Array.h> 28 29 #include <wtf/RefCounted.h> … … 30 31 namespace WebCore { 31 32 33 class VREyeParameters; 32 34 class VRPose; 35 struct VRPlatformTrackingInfo; 33 36 34 37 class VRFrameData : public RefCounted<VRFrameData> { … … 39 42 } 40 43 41 double timestamp() const ;44 double timestamp() const { return m_timestamp; } 42 45 43 Float32Array*leftProjectionMatrix() const;44 Float32Array*leftViewMatrix() const;46 Ref<Float32Array> leftProjectionMatrix() const; 47 Ref<Float32Array> leftViewMatrix() const; 45 48 46 Float32Array*rightProjectionMatrix() const;47 Float32Array*rightViewMatrix() const;49 Ref<Float32Array> rightProjectionMatrix() const; 50 Ref<Float32Array> rightViewMatrix() const; 48 51 49 52 const VRPose& pose() const; 53 54 void update(const VRPlatformTrackingInfo&, const VREyeParameters& leftEye, const VREyeParameters& rightEye, double depthNear, double depthFar); 50 55 51 56 private: 52 57 VRFrameData(); 53 58 59 double m_timestamp { 0 }; 54 60 Ref<VRPose> m_pose; 61 TransformationMatrix m_leftProjectionMatrix; 62 TransformationMatrix m_rightProjectionMatrix; 63 TransformationMatrix m_leftViewMatrix; 64 TransformationMatrix m_rightViewMatrix; 55 65 }; 56 66 -
trunk/Source/WebCore/Modules/webvr/VRPose.cpp
r221966 r230428 28 28 namespace WebCore { 29 29 30 VRPose::VRPose() = default; 30 static RefPtr<Float32Array> optionalFloat3ToJSCArray(const std::optional<VRPlatformTrackingInfo::Float3>& data) 31 { 32 if (!data) 33 return nullptr; 31 34 32 Float32Array* VRPose::position() const 33 { 34 return nullptr; 35 return Float32Array::create(data->data, 3).releaseNonNull(); 35 36 } 36 37 37 Float32Array* VRPose::linearVelocity() const38 RefPtr<Float32Array> VRPose::position() const 38 39 { 39 return nullptr; 40 if (!m_trackingInfo.position) 41 return nullptr; 42 43 auto& position = *m_trackingInfo.position; 44 float positionData[3] = { position.x(), position.y(), position.z() }; 45 return Float32Array::create(positionData, 3).releaseNonNull(); 40 46 } 41 47 42 Float32Array* VRPose::linearAcceleration() const48 RefPtr<Float32Array> VRPose::linearVelocity() const 43 49 { 44 return nullptr;50 return optionalFloat3ToJSCArray(m_trackingInfo.linearVelocity); 45 51 } 46 52 47 Float32Array* VRPose::orientation() const53 RefPtr<Float32Array> VRPose::linearAcceleration() const 48 54 { 49 return nullptr;55 return optionalFloat3ToJSCArray(m_trackingInfo.linearAcceleration); 50 56 } 51 57 52 Float32Array* VRPose::angularVelocity() const58 RefPtr<Float32Array> VRPose::orientation() const 53 59 { 54 return nullptr; 60 if (!m_trackingInfo.orientation) 61 return nullptr; 62 63 auto& orientation = *m_trackingInfo.orientation; 64 float orientationData[4] = { orientation.x, orientation.y, orientation.z, orientation.w }; 65 return Float32Array::create(orientationData, 4).releaseNonNull(); 55 66 } 56 67 57 Float32Array* VRPose::angularAcceleration() const68 RefPtr<Float32Array> VRPose::angularVelocity() const 58 69 { 59 return nullptr; 70 return optionalFloat3ToJSCArray(m_trackingInfo.angularVelocity); 71 } 72 73 RefPtr<Float32Array> VRPose::angularAcceleration() const 74 { 75 return optionalFloat3ToJSCArray(m_trackingInfo.angularAcceleration); 60 76 } 61 77 -
trunk/Source/WebCore/Modules/webvr/VRPose.h
r228218 r230428 25 25 #pragma once 26 26 27 #include "VRPlatformDisplay.h" 27 28 #include <JavaScriptCore/Float32Array.h> 28 29 #include <wtf/RefCounted.h> … … 37 38 } 38 39 39 Float32Array* position() const; 40 Float32Array* linearVelocity() const; 41 Float32Array* linearAcceleration() const; 40 static Ref<VRPose> create(const VRPlatformTrackingInfo& trackingInfo) 41 { 42 return adoptRef(*new VRPose(trackingInfo)); 43 } 42 44 43 Float32Array* orientation() const; 44 Float32Array* angularVelocity() const; 45 Float32Array* angularAcceleration() const; 45 RefPtr<Float32Array> position() const; 46 RefPtr<Float32Array> linearVelocity() const; 47 RefPtr<Float32Array> linearAcceleration() const; 48 49 RefPtr<Float32Array> orientation() const; 50 RefPtr<Float32Array> angularVelocity() const; 51 RefPtr<Float32Array> angularAcceleration() const; 52 53 void update(const VRPlatformTrackingInfo& trackingInfo) { m_trackingInfo = trackingInfo; }; 46 54 47 55 private: 48 VRPose(); 56 VRPose() = default; 57 58 VRPose(const VRPlatformTrackingInfo& trackingInfo) 59 : m_trackingInfo(trackingInfo) 60 { 61 } 62 63 VRPlatformTrackingInfo m_trackingInfo; 49 64 }; 50 65 -
trunk/Source/WebCore/platform/vr/VRPlatformDisplay.h
r229089 r230428 104 104 }; 105 105 106 struct VRPlatformTrackingInfo { 107 struct Quaternion { 108 Quaternion() 109 : x(0), y(0), z(0), w(1) { } 110 111 Quaternion(float x, float y, float z, float w) 112 : x(x), y(y), z(z), w(w) { } 113 114 Quaternion& conjugate() 115 { 116 x *= -1; 117 y *= -1; 118 z *= -1; 119 return *this; 120 } 121 122 Quaternion& operator*(float factor) 123 { 124 x *= factor; 125 y *= factor; 126 z *= factor; 127 w *= factor; 128 return *this; 129 } 130 float x, y, z, w; 131 }; 132 133 struct Float3 { 134 Float3(float a, float b, float c) 135 : data { a, b, c } { } 136 137 float data[3]; 138 }; 139 140 void clear() 141 { 142 timestamp = 0; 143 position = std::nullopt; 144 orientation = std::nullopt; 145 angularAcceleration = std::nullopt; 146 angularVelocity = std::nullopt; 147 linearAcceleration = std::nullopt; 148 linearVelocity = std::nullopt; 149 } 150 151 std::optional<Quaternion> orientation; 152 std::optional<FloatPoint3D> position; 153 std::optional<Float3> angularAcceleration; 154 std::optional<Float3> angularVelocity; 155 std::optional<Float3> linearAcceleration; 156 std::optional<Float3> linearVelocity; 157 double timestamp { 0 }; 158 }; 159 106 160 class VRPlatformDisplay { 107 161 public: 108 162 virtual VRPlatformDisplayInfo getDisplayInfo() = 0; 163 virtual VRPlatformTrackingInfo getTrackingInfo() = 0; 109 164 virtual ~VRPlatformDisplay() = default; 110 165 -
trunk/Source/WebCore/platform/vr/openvr/VRPlatformDisplayOpenVR.cpp
r229089 r230428 51 51 m_displayInfo.setCapabilityFlags(VRDisplayCapabilityFlag::None | VRDisplayCapabilityFlag::Position | VRDisplayCapabilityFlag::Orientation | VRDisplayCapabilityFlag::ExternalDisplay | VRDisplayCapabilityFlag::Present); 52 52 53 m_compositor->SetTrackingSpace(vr::TrackingUniverseSeated); 54 53 55 updateEyeParameters(); 54 56 updateStageParameters(); … … 100 102 } 101 103 104 // FIXME: we might want to generalize this function for other backends. 105 static VRPlatformTrackingInfo::Quaternion rotationMatrixToQuaternion(const float (&matrix)[3][4]) 106 { 107 // See https://d3cw3dd2w32x2b.cloudfront.net/wp-content/uploads/2015/01/matrix-to-quat.pdf. 108 VRPlatformTrackingInfo::Quaternion quaternion; 109 float trace; 110 if (matrix[2][2] < 0) { 111 if (matrix[0][0] > matrix[1][1]) { 112 trace = 1 + matrix[0][0] - matrix[1][1] - matrix[2][2]; 113 quaternion = { trace, matrix[0][1]+matrix[1][0], matrix[2][0]+matrix[0][2], matrix[1][2] - matrix[2][1] }; 114 } else { 115 trace = 1 - matrix[0][0] + matrix[1][1] - matrix[2][2]; 116 quaternion = { matrix[0][1]+matrix[1][0], trace, matrix[1][2]+matrix[2][1], matrix[2][0] - matrix[0][2] }; 117 } 118 } else { 119 if (matrix[0][0] < -matrix[1][1]) { 120 trace = 1 - matrix[0][0] - matrix[1][1] + matrix[2][2]; 121 quaternion = { matrix[2][0]+matrix[0][2], matrix[1][2]+matrix[2][1], trace , matrix[0][1] - matrix[1][0] }; 122 } else { 123 trace = 1 + matrix[0][0] + matrix[1][1] + matrix[2][2]; 124 quaternion = { matrix[1][2] - matrix[2][1], matrix[2][0] - matrix[0][2], matrix[0][1] - matrix[1][0], trace }; 125 } 126 } 127 return quaternion * (0.5 / sqrt(trace)); 128 } 129 130 VRPlatformTrackingInfo VRPlatformDisplayOpenVR::getTrackingInfo() 131 { 132 vr::TrackedDevicePose_t poses[vr::k_unMaxTrackedDeviceCount]; 133 134 m_compositor->WaitGetPoses(nullptr, 0, poses, vr::k_unMaxTrackedDeviceCount); 135 136 m_trackingInfo.clear(); 137 138 vr::Compositor_FrameTiming timing; 139 timing.m_nSize = sizeof(vr::Compositor_FrameTiming); 140 m_compositor->GetFrameTiming(&timing); 141 m_trackingInfo.timestamp = timing.m_flSystemTimeInSeconds; 142 143 if (!poses[vr::k_unTrackedDeviceIndex_Hmd].bDeviceIsConnected 144 || !poses[vr::k_unTrackedDeviceIndex_Hmd].bPoseIsValid 145 || poses[vr::k_unTrackedDeviceIndex_Hmd].eTrackingResult != vr::TrackingResult_Running_OK) { 146 // FIXME: Init some data maybe???. 147 return m_trackingInfo; 148 } 149 150 const auto& HMDPose = poses[vr::k_unTrackedDeviceIndex_Hmd]; 151 const auto& transform = HMDPose.mDeviceToAbsoluteTracking; 152 m_trackingInfo.orientation = rotationMatrixToQuaternion(transform.m); 153 m_trackingInfo.orientation->conjugate(); 154 m_trackingInfo.position = FloatPoint3D(transform.m[0][3], transform.m[1][3], transform.m[2][3]); 155 m_trackingInfo.angularVelocity = VRPlatformTrackingInfo::Float3(HMDPose.vAngularVelocity.v[0], HMDPose.vAngularVelocity.v[1], HMDPose.vAngularVelocity.v[2]); 156 m_trackingInfo.linearVelocity = VRPlatformTrackingInfo::Float3(HMDPose.vVelocity.v[0], HMDPose.vVelocity.v[1], HMDPose.vVelocity.v[2]); 157 158 return m_trackingInfo; 159 } 160 102 161 }; // namespace WebCore 103 162 -
trunk/Source/WebCore/platform/vr/openvr/VRPlatformDisplayOpenVR.h
r229014 r230428 35 35 ~VRPlatformDisplayOpenVR() = default; 36 36 VRPlatformDisplayInfo getDisplayInfo() override { return m_displayInfo; } 37 VRPlatformTrackingInfo getTrackingInfo() override; 37 38 38 39 private: … … 48 49 49 50 VRPlatformDisplayInfo m_displayInfo; 51 VRPlatformTrackingInfo m_trackingInfo; 50 52 }; 51 53
Note: See TracChangeset
for help on using the changeset viewer.