Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: chrome/browser/android/vr_shell/vr_controller.cc

Issue 2795793002: Implementation of elbow model for the controller position and rotation. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/vr_shell/vr_controller.cc
diff --git a/chrome/browser/android/vr_shell/vr_controller.cc b/chrome/browser/android/vr_shell/vr_controller.cc
index b64671687be12e2dc4d8823ac6d5ef4400fd27f2..efbece142e203b729eb728fb7554ce9df5df4845 100644
--- a/chrome/browser/android/vr_shell/vr_controller.cc
+++ b/chrome/browser/android/vr_shell/vr_controller.cc
@@ -9,6 +9,7 @@
#include <utility>
#include "base/logging.h"
+#include "base/memory/ptr_util.h"
#include "base/time/time.h"
#include "chrome/browser/android/vr_shell/vr_math.h"
#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h"
@@ -41,8 +42,6 @@ constexpr float kNanoSecondsPerSecond = 1.0e9f;
constexpr int kMaxNumOfExtrapolations = 2;
-static constexpr gvr::Vec3f kControllerPosition = {0.2f, -0.5f, -0.15f};
-
class Vector {
public:
static inline void ClampTouchpadPosition(gvr::Vec2f* position) {
@@ -87,7 +86,10 @@ class Vector {
VrController::VrController(gvr_context* vr_context) {
DVLOG(1) << __FUNCTION__ << "=" << this;
Initialize(vr_context);
+ elbow_model_ = base::MakeUnique<ElbowModel>(handedness_);
Reset();
+ last_timestamp_nanos_ =
+ gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos;
}
VrController::~VrController() {
@@ -137,19 +139,20 @@ gvr::Quatf VrController::Orientation() const {
}
gvr::Mat4f VrController::GetTransform() const {
- // TODO(acondor): Position and orientation needs to be obtained
- // from an elbow model.
- // Placing the controller in a fixed position for now.
- gvr::Mat4f mat;
- SetIdentityM(mat);
- // Changing rotation point.
- TranslateM(mat, mat, 0, 0, 0.05);
- mat = MatrixMul(QuatToMatrix(Orientation()), mat);
- TranslateM(mat, mat, kControllerPosition.x, kControllerPosition.y,
- kControllerPosition.z - 0.05);
+ auto mat = QuatToMatrix(elbow_model_->GetControllerRotation());
+ auto position = elbow_model_->GetControllerPosition();
+ TranslateM(mat, mat, position.x, position.y, position.z);
return mat;
}
+float VrController::GetOpacity() const {
+ return elbow_model_->GetAlphaValue();
+}
+
+gvr::Vec3f VrController::GetPointerStart() const {
+ return elbow_model_->GetControllerPosition();
+}
+
VrControllerModel::State VrController::GetModelState() const {
if (ButtonState(gvr::ControllerButton::GVR_CONTROLLER_BUTTON_CLICK))
return VrControllerModel::TOUCHPAD;
@@ -184,7 +187,7 @@ bool VrController::IsConnected() {
return controller_state_->GetConnectionState() == gvr::kControllerConnected;
}
-void VrController::UpdateState() {
+void VrController::UpdateState(const gvr::Vec3f& head_direction) {
const int32_t old_status = controller_state_->GetApiStatus();
const int32_t old_connection_state = controller_state_->GetConnectionState();
// Read current controller state.
@@ -196,6 +199,14 @@ void VrController::UpdateState() {
<< gvr_controller_connection_state_to_string(
controller_state_->GetConnectionState());
}
+
+ float delta_time_seconds =
asimjour1 2017/04/19 18:58:12 this conversion is repeated a few times, could you
acondor_ 2017/04/21 21:04:32 Done.
+ (gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos -
+ last_timestamp_nanos_) /
+ kNanoSecondsPerSecond;
+ elbow_model_->Update({IsConnected(), Orientation(),
+ controller_state_->GetGyro(), head_direction,
+ delta_time_seconds});
}
void VrController::UpdateTouchInfo() {

Powered by Google App Engine
This is Rietveld 408576698