[Bf-blender-cvs] [5a8e1c2] HMD_viewport: Reset camera on HMD session end
Julian Eisel
noreply at git.blender.org
Thu Mar 17 22:51:08 CET 2016
Commit: 5a8e1c28c8347fa0a551b9710bad4e6d39823238
Author: Julian Eisel
Date: Thu Mar 17 22:50:00 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB5a8e1c28c8347fa0a551b9710bad4e6d39823238
Reset camera on HMD session end
Added utility functions for getting/setting rotation from quaterion.
===================================================================
M source/blender/blenkernel/BKE_object.h
M source/blender/blenkernel/intern/object.c
M source/blender/windowmanager/intern/wm_operators.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 7d60964..21b5371 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -118,6 +118,8 @@ void BKE_object_obdata_size_init(struct Object *ob, const float scale);
void BKE_object_scale_to_mat3(struct Object *ob, float mat[3][3]);
void BKE_object_rot_to_mat3(struct Object *ob, float mat[3][3], bool use_drot);
void BKE_object_mat3_to_rot(struct Object *ob, float mat[3][3], bool use_compat);
+void BKE_object_rot_to_quat(struct Object *ob, float r_quat[4]);
+void BKE_object_quat_to_rot(struct Object *ob, float quat[4]);
void BKE_object_to_mat3(struct Object *ob, float mat[3][3]);
void BKE_object_to_mat4(struct Object *ob, float mat[4][4]);
void BKE_object_apply_mat4(struct Object *ob, float mat[4][4], const bool use_compat, const bool use_parent);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index f81f13e..79a4b36 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1998,6 +1998,32 @@ void BKE_object_mat3_to_rot(Object *ob, float mat[3][3], bool use_compat)
}
}
+void BKE_object_rot_to_quat(Object *ob, float r_quat[4])
+{
+ if (ob->rotmode == ROT_MODE_QUAT) {
+ copy_qt_qt(r_quat, ob->quat);
+ }
+ else if (ob->rotmode == ROT_MODE_AXISANGLE) {
+ axis_angle_to_quat(r_quat, ob->rotAxis, ob->rotAngle);
+ }
+ else {
+ eulO_to_quat(r_quat, ob->rot, ob->rotmode);
+ }
+}
+
+void BKE_object_quat_to_rot(Object *ob, float quat[4])
+{
+ if (ob->rotmode == ROT_MODE_QUAT) {
+ copy_qt_qt(ob->quat, quat);
+ }
+ else if (ob->rotmode == ROT_MODE_AXISANGLE) {
+ quat_to_axis_angle(ob->rotAxis, &ob->rotAngle, quat);
+ }
+ else {
+ quat_to_eulO(ob->rot, ob->rotmode, quat);
+ }
+}
+
void BKE_object_tfm_protected_backup(const Object *ob,
ObjectTfmProtectedChannels *obtfm)
{
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index a71bb5f..212425a 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -90,6 +90,7 @@
#include "BKE_screen.h" /* BKE_ST_MAXNAME */
#include "BKE_unit.h"
#include "BKE_utildefines.h"
+#include "BKE_object.h"
#include "BKE_idcode.h"
@@ -5164,7 +5165,12 @@ static int hmd_session_run_invoke(bContext *C, wmOperator *UNUSED(op), const wmE
scene->flag ^= SCE_HMD_RUNNING;
if (was_hmd_running) {
+ View3D *v3d = CTX_wm_view3d(C);
+ Object *ob = v3d ? v3d->camera : scene->camera;
WM_window_fullscreen_toggle(hmd_win, false, true);
+ /* reset initial camera rotation */
+ BKE_object_quat_to_rot(ob, init_rot);
+ DAG_id_tag_update(&ob->id, OB_RECALC_OB); /* sets recalc flags */
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
else {
@@ -5196,15 +5202,7 @@ static int hmd_session_run_invoke(bContext *C, wmOperator *UNUSED(op), const wmE
if (v3d->camera)
rv3d->persp = RV3D_CAMOB;
- if (ob->rotmode == ROT_MODE_QUAT) {
- copy_qt_qt(init_rot, ob->quat);
- }
- else if (ob->rotmode == ROT_MODE_AXISANGLE) {
- axis_angle_to_quat(init_rot, ob->rotAxis, ob->rotAngle);
- }
- else {
- eulO_to_quat(init_rot, v3d->camera->rot, v3d->camera->rotmode);
- }
+ BKE_object_rot_to_quat(v3d->camera, init_rot);
}
WM_window_fullscreen_toggle(hmd_win, true, false);
@@ -5239,15 +5237,7 @@ static void hmd_session_refresh(bContext *C, wmWindow *hmd_win, Scene *scene, HM
float quat[4];
mul_qt_qtqt(quat, init_rot, data->orientation);
- if (ob->rotmode == ROT_MODE_QUAT) {
- copy_qt_qt(ob->quat, quat);
- }
- else if (ob->rotmode == ROT_MODE_AXISANGLE) {
- quat_to_axis_angle(ob->rotAxis, &ob->rotAngle, quat);
- }
- else {
- quat_to_eulO(ob->rot, ob->rotmode, quat);
- }
+ BKE_object_quat_to_rot(ob, quat);
DAG_id_tag_update(&ob->id, OB_RECALC_OB); /* sets recalc flags */
/* tag hmd region for update */
More information about the Bf-blender-cvs
mailing list