[Bf-blender-cvs] [a0b49f3] multiview: Multiview Base Commit 8/10: Viewport 3D (camera)
Dalai Felinto
noreply at git.blender.org
Sat May 10 20:18:15 CEST 2014
Commit: a0b49f357aa87dcd4b459a6280259db06d3ea115
Author: Dalai Felinto
Date: Sat May 10 14:58:28 2014 -0300
https://developer.blender.org/rBa0b49f357aa87dcd4b459a6280259db06d3ea115
Multiview Base Commit 8/10: Viewport 3D (camera)
This is part of the multiview rebase from a github to git.blender.org
repository. The rebase was made based on file areas, so build is likely
broken in some of those parts, but it bulds fine in the end.
The documentation and sample files were removed and now live in:
https://github.com/dfelinto/multiview-samples
The original git history can be found in:
https://github.com/dfelinto/blender/tree/multiview-pre-b3d
Code contributors of the original branch in github:
* Alexey Akishin
* Gabriel Caraballo
Original design made in contribution with Francesco Siddi
Original branch and design partially reviewed by Brecht Van Lommel
===================================================================
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_draw.c
M source/blender/makesdna/DNA_view3d_types.h
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index a7856b3..7ec78ef 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2828,16 +2828,42 @@ class VIEW3D_PT_view3d_display(Panel):
row.prop(region, "use_box_clip")
-class VIEW3D_PT_view3d_shading(Panel):
+class VIEW3D_PT_view3d_stereo(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
- bl_label = "Shading"
+ bl_label = "Stereoscopy"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
+ scene = context.scene
+
+ multiview = scene.render.use_multiple_views
+ engine = scene.render.engine
+
+ return context.space_data and multiview
+
+ def draw(self, context):
+ layout = self.layout
view = context.space_data
- return (view)
+
+ basic_stereo = context.scene.render.views_setup == 'SETUP_BASIC'
+
+ col = layout.column()
+ col.row().prop(view, "stereoscopy_camera", expand=True)
+
+ col.label(text="Display:")
+ row = col.row()
+ row.active = basic_stereo
+ row.prop(view, "show_stereoscopy_cameras")
+ col.prop(view, "show_stereoscopy_planes")
+ col.prop(view, "show_stereoscopy_volume")
+
+
+class VIEW3D_PT_view3d_shading(Panel):
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'UI'
+ bl_label = "Shading"
def draw(self, context):
layout = self.layout
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 4d958a5..9701dbb 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -325,7 +325,7 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->gridflag = V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_FLOOR;
v3d->flag = V3D_SELECT_OUTLINE;
- v3d->flag2 = V3D_SHOW_RECONSTRUCTION | V3D_SHOW_GPENCIL;
+ v3d->flag2 = V3D_SHOW_GPENCIL;
v3d->lens = 35.0f;
v3d->near = 0.01f;
@@ -337,6 +337,9 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->bundle_size = 0.2f;
v3d->bundle_drawtype = OB_PLAINAXES;
+
+ /* stereo */
+ v3d->stereo_camera = STEREO_3D_ID;
/* header */
ar = MEM_callocN(sizeof(ARegion), "header for view3d");
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 9ce6bf5..c92fd4d 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3323,6 +3323,60 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar)
}
}
+static bool view3d_stereo_active(const bContext *C, Scene *scene)
+{
+ wmWindow *win = CTX_wm_window(C);
+
+ if ((scene->r.scemode & R_MULTIVIEW) == 0)
+ return false;
+
+ if (WM_stereo_enabled(win, true) == false)
+ return false;
+
+ return true;
+}
+
+static void view3d_stereo_setup(Scene *scene, View3D *v3d, ARegion *ar)
+{
+ bool left;
+
+ /* show only left or right camera */
+ if (v3d->stereo_camera != STEREO_3D_ID)
+ v3d->eye = v3d->stereo_camera;
+
+ left = v3d->eye == STEREO_LEFT_ID;
+
+ /* update the viewport matrices with the new camera */
+ if (scene->r.views_setup == SCE_VIEWS_SETUP_BASIC) {
+ Camera *data;
+ float viewmat[4][4];
+ float orig_shift;
+
+ data = (Camera *)v3d->camera->data;
+ orig_shift = data->shiftx;
+
+ BKE_camera_stereo_matrices(v3d->camera, viewmat, &data->shiftx, left);
+ view3d_main_area_setup_view(scene, v3d, ar, viewmat, NULL);
+
+ /* restore the original shift */
+ data->shiftx = orig_shift;
+ }
+ else { /* SCE_VIEWS_SETUP_ADVANCED */
+ Object *orig_cam = v3d->camera;
+ SceneRenderView *srv;
+
+ if (left)
+ srv = BLI_findstring(&scene->r.views, STEREO_LEFT_NAME, offsetof(SceneRenderView, name));
+ else
+ srv = BLI_findstring(&scene->r.views, STEREO_RIGHT_NAME, offsetof(SceneRenderView, name));
+
+ v3d->camera = BKE_camera_multiview_advanced(scene, &scene->r, v3d->camera, srv->suffix);
+ view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL);
+
+ /* restore the original camera */
+ v3d->camera = orig_cam;
+ }
+}
#ifdef WITH_GAMEENGINE
static void update_lods(Scene *scene, float camera_pos[3])
@@ -3371,6 +3425,10 @@ static void view3d_main_area_draw_objects(const bContext *C, Scene *scene, View3
/* clear the background */
view3d_main_area_clear(scene, v3d, ar);
+ /* change view according to stereo eye */
+ if (view3d_stereo_active(C, scene))
+ view3d_stereo_setup(scene, v3d, ar);
+
/* enables anti-aliasing for 3D view drawing */
if (U.ogl_multisamples != USER_MULTISAMPLE_NONE) {
glEnable(GL_MULTISAMPLE_ARB);
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index 98c12e9..c714f09 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -212,7 +212,9 @@ typedef struct View3D {
/* drawflags, denoting state */
char zbuf, transp, xray;
- char pad3[5];
+
+ char eye; /* multiview current eye - for internal use */
+ char pad3[4];
void *properties_storage; /* Nkey panel stores stuff here (runtime only!) */
struct Material *defmaterial; /* used by matcap now */
@@ -220,9 +222,21 @@ typedef struct View3D {
/* XXX deprecated? */
struct bGPdata *gpd DNA_DEPRECATED; /* Grease-Pencil Data (annotation layers) */
+ /* stereo */
+ short stereo_flag;
+ char stereo_camera;
+ char pad4;
+ short pad5, pad6;
+ float stereo_convergence_factor;
+ float pad7;
} View3D;
+/* View3D->stereo_flag (short) */
+#define V3D_S3D_DISPCAMERAS (1 << 0)
+#define V3D_S3D_DISPPLANES (1 << 1)
+#define V3D_S3D_DISPVOLUME (1 << 2)
+
/* View3D->flag (short) */
/*#define V3D_DISPIMAGE 1*/ /*UNUSED*/
#define V3D_DISPBGPICS 2
@@ -284,7 +298,6 @@ typedef struct View3D {
#define V3D_OCCLUDE_WIRE 16384
#define V3D_SHADELESS_TEX 32768
-
/* View3D->around */
#define V3D_CENTER 0
#define V3D_CENTROID 3
More information about the Bf-blender-cvs
mailing list