[Bf-blender-cvs] [8b701bb] HMD_viewport: Hook up HMD with camera

Julian Eisel noreply at git.blender.org
Wed Mar 16 16:10:53 CET 2016


Commit: 8b701bb913c8de194fd92c3cb8410d6667007d0c
Author: Julian Eisel
Date:   Thu Mar 10 06:22:54 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB8b701bb913c8de194fd92c3cb8410d6667007d0c

Hook up HMD with camera

===================================================================

M	intern/ghost/intern/GHOST_OpenHMDManager.cpp
M	release/scripts/startup/bl_ui/properties_render_layer.py
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/intern/ghost/intern/GHOST_OpenHMDManager.cpp b/intern/ghost/intern/GHOST_OpenHMDManager.cpp
index 7a389d3..fe9f171 100644
--- a/intern/ghost/intern/GHOST_OpenHMDManager.cpp
+++ b/intern/ghost/intern/GHOST_OpenHMDManager.cpp
@@ -61,15 +61,20 @@ bool GHOST_OpenHMDManager::processEvents()
 
         GHOST_EventOpenHMD *event = new GHOST_EventOpenHMD(now, m_system.getWindowManager()->getActiveWindow());
         GHOST_TEventOpenHMDData* data = (GHOST_TEventOpenHMDData*) event->getData();
-
-        ohmd_device_getf(m_device, OHMD_ROTATION_QUAT, data->orientation);
-
-        printf("sending openhmd event with data x y z w %f %f %f %f at time %llu\n",
-               data->orientation[0],
-               data->orientation[1],
-               data->orientation[2],
-               data->orientation[3],
-               now);
+        float quat[4];
+
+        ohmd_device_getf(m_device, OHMD_ROTATION_QUAT, quat);
+        data->orientation[0] = quat[3];
+        data->orientation[1] = quat[0];
+        data->orientation[2] = quat[1];
+        data->orientation[3] = quat[2];
+
+//        printf("sending openhmd event with data x y z w %f %f %f %f at time %llu\n",
+//               data->orientation[0],
+//               data->orientation[1],
+//               data->orientation[2],
+//               data->orientation[3],
+//               now);
 
 
         m_system.pushEvent(event);
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 13150c5..0ae63cf 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -226,7 +226,7 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
             row.prop(rv, "camera_suffix", text="")
         else:
             col = layout.column()
-            col.prop(rd, "hmd_camera_lock")
+            col.prop(rd, "hmd_camlock")
             col.operator("wm.hmd_view_open")
 
 
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 718696b..74c9995 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4800,6 +4800,51 @@ void VIEW3D_OT_enable_manipulator(wmOperatorType *ot)
 	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
+/* ***************** TODO ******************* */
+
+typedef struct HMDData {
+	float orientation[4];
+} HMDData;
+
+static int hmd_refresh_poll(bContext *C)
+{
+	Scene *scene = CTX_data_scene(C);
+	return (scene->r.scemode & R_HMD_USE_CAM) != 0;
+}
+
+static int hmd_refresh_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+	Scene *scene = CTX_data_scene(C);
+	View3D *v3d = CTX_wm_view3d(C);
+	Object *camera_ob = v3d ? v3d->camera : scene->camera;
+	HMDData *data = event->customdata;
+	float quad[4] = {M_SQRT1_2, M_SQRT1_2, 0.0f, 0.0f};
+
+	mul_qt_qtqt(camera_ob->quat, quad, data->orientation);
+	normalize_qt(camera_ob->quat);
+	loc_quat_size_to_mat4(camera_ob->obmat, camera_ob->loc, camera_ob->quat, camera_ob->size);
+
+	DAG_id_tag_update(&camera_ob->id, 0);  /* sets recalc flags */
+	ED_region_tag_redraw(CTX_wm_region(C));
+
+	return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_hmd_refresh(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Refresh HMD Data";
+	ot->description = "Updates the orientation of the head mounted display";
+	ot->idname = "VIEW3D_OT_hmd_refresh";
+
+	/* api callbacks */
+	ot->invoke = hmd_refresh_invoke;
+	ot->poll = hmd_refresh_poll;
+
+	/* flags */
+	ot->flag = OPTYPE_INTERNAL;
+}
+
 /* ************************* below the line! *********************** */
 
 
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index c398356..f0a36ef 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -271,6 +271,7 @@ void VIEW3D_OT_snap_cursor_to_grid(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot);
 void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
+void VIEW3D_OT_hmd_refresh(struct wmOperatorType *ot);
 
 /* space_view3d.c */
 ARegion *view3d_has_buttons_region(ScrArea *sa);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index a5411da1..c7c5399 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -218,6 +218,7 @@ void view3d_operatortypes(void)
 	WM_operatortype_append(VIEW3D_OT_snap_cursor_to_center);
 	WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected);
 	WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
+	WM_operatortype_append(VIEW3D_OT_hmd_refresh);
 		
 	transform_operatortypes();
 }
@@ -504,6 +505,8 @@ void view3d_keymap(wmKeyConfig *keyconf)
 	
 	WM_keymap_add_menu(keymap, "VIEW3D_MT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
 	
+	WM_keymap_add_item(keymap, "VIEW3D_OT_hmd_refresh", EVT_VR_TRANSFORM, KM_ANY, KM_ANY, 0);
+	
 #ifdef __APPLE__
 	WM_keymap_add_item(keymap, "VIEW3D_OT_copybuffer", CKEY, KM_PRESS, KM_OSKEY, 0);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_pastebuffer", VKEY, KM_PRESS, KM_OSKEY, 0);
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 005cfe6..ce64c56 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1657,7 +1657,7 @@ typedef struct Scene {
 #define R_VIEWPORT_PREVIEW	0x80000
 #define R_EXR_CACHE_FILE	0x100000
 #define R_MULTIVIEW			0x200000
-#define R_HMD_USE_CAM       0x400000
+#define R_HMD_USE_CAM		0x400000
 
 /* r->stamp */
 #define R_STAMP_TIME 	0x0001
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 285fe8c..92fe4a8 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -808,6 +808,14 @@ static void rna_RenderSettings_stereoViews_begin(CollectionPropertyIterator *ite
 	rna_iterator_listbase_begin(iter, &rd->views, rna_RenderSettings_stereoViews_skip);
 }
 
+static void rna_RenderSettings_hmd_camlock_update(
+        struct Main *UNUSED(main), struct Scene *scene,
+        struct PointerRNA *UNUSED(ptr))
+{
+	Object *camera_ob = scene->camera;
+	DAG_id_tag_update(&camera_ob->id, OB_RECALC_OB);
+}
+
 static char *rna_RenderSettings_path(PointerRNA *UNUSED(ptr))
 {
 	return BLI_sprintfN("render");
@@ -5915,10 +5923,10 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "SceneRenderView");
 	RNA_def_property_ui_text(prop, "Render Views", "");
 
-	prop = RNA_def_property(srna, "hmd_camera_lock", PROP_BOOLEAN, PROP_NONE);
-    RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_HMD_USE_CAM);
-    RNA_def_property_ui_text(prop, "HMD Rotation", "Use the rotation of a head mounted display if available");
-    RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+	prop = RNA_def_property(srna, "hmd_camlock", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_HMD_USE_CAM);
+	RNA_def_property_ui_text(prop, "HMD Rotation", "Use the rotation of a head mounted display if available");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RenderSettings_hmd_camlock_update");
 
 	prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_MULTIVIEW);




More information about the Bf-blender-cvs mailing list