[Bf-blender-cvs] [3ce1849] multiview: Viewport 3D: support for Volume drawing for Advanced Setup (Multi-View) too
Dalai Felinto
noreply at git.blender.org
Tue Sep 23 12:41:57 CEST 2014
Commit: 3ce1849f2552ad1dd3c08bfcbde1f5f78e33a315
Author: Dalai Felinto
Date: Tue Sep 23 12:15:27 2014 +0200
Branches: multiview
https://developer.blender.org/rB3ce1849f2552ad1dd3c08bfcbde1f5f78e33a315
Viewport 3D: support for Volume drawing for Advanced Setup (Multi-View) too
(and flipped red-cyan volume colors to match what you see from the
camera)
===================================================================
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/editors/space_view3d/drawobject.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 5941c80..e1c78c7 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2860,6 +2860,7 @@ class VIEW3D_PT_view3d_stereo(Panel):
row.active = basic_stereo
row.prop(view, "show_stereo_3d_cameras")
row = col.row()
+ row.active = basic_stereo
split = row.split()
split.prop(view, "show_stereo_3d_convergence_plane")
split = row.split()
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index fe16049..23a2ea4 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1801,22 +1801,23 @@ static bool drawcamera_is_stereo3d(Scene *scene, View3D *v3d, Object *ob)
{
return (ob == v3d->camera) &&
(scene->r.scemode & R_MULTIVIEW) != 0 &&
- (scene->r.views_setup == SCE_VIEWS_SETUP_BASIC) &&
(v3d->stereo3d_flag);
}
static void drawcamera_stereo3d(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, Camera *cam,
float vec[4][3], float drawsize, float scale[3])
{
- int i;
+ int i, j;
float obmat[4][4];
float vec_lr[2][4][3];
float fac = 1.0f;
float origin[2][3] = {{0}};
float tvec[3];
+ Camera *cams[2] = {cam};
+ const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
- const bool is_stereo3d_cameras = (v3d->stereo3d_flag & V3D_S3D_DISPCAMERAS);
- const bool is_stereo3d_plane = (v3d->stereo3d_flag & V3D_S3D_DISPPLANE);
+ const bool is_stereo3d_cameras = (v3d->stereo3d_flag & V3D_S3D_DISPCAMERAS) && (scene->r.views_setup == SCE_VIEWS_SETUP_BASIC);
+ const bool is_stereo3d_plane = (v3d->stereo3d_flag & V3D_S3D_DISPPLANE) && (scene->r.views_setup == SCE_VIEWS_SETUP_BASIC);
const bool is_stereo3d_volume = (v3d->stereo3d_flag & V3D_S3D_DISPVOLUME);
zero_v3(tvec);
@@ -1826,70 +1827,41 @@ static void drawcamera_stereo3d(Scene *scene, View3D *v3d, RegionView3D *rv3d, O
glPushMatrix();
- /* left camera */
- glLoadMatrixf(rv3d->viewmat);
- BKE_camera_model_matrix(&scene->r, ob, STEREO_LEFT_NAME, obmat);
- glMultMatrixf(obmat);
-
- copy_m3_m3(vec_lr[0], vec);
- copy_v3_v3(vec_lr[0][3], vec[3]);
-
- if (cam->stereo.convergence_mode == CAM_S3D_OFFAXIS) {
- float shift_x = BKE_camera_shift_x(&scene->r, ob, STEREO_LEFT_NAME) - cam->shiftx;
- shift_x *= drawsize * scale[0] * fac;
- for (i = 0; i < 4; i++)
- vec_lr[0][i][0] += shift_x;
- }
-
- if (is_stereo3d_cameras) {
- /* camera frame */
- drawcamera_frame(vec_lr[0], GL_LINE_LOOP);
-
- /* center point to camera frame */
- drawcamera_framelines(vec_lr[0], tvec);
- }
-
- /* connecting line */
- mul_m4_v3(obmat, origin[0]);
-
- /* convergence plane */
- if (is_stereo3d_plane || is_stereo3d_volume)
- for (i = 0; i < 4; i++)
- mul_m4_v3(obmat, vec_lr[0][i]);
+ for (i = 0; i < 2; i++) {
+ ob = BKE_camera_render(scene, ob, names[i]);
+ cams[i] = ob->data;
+ glLoadMatrixf(rv3d->viewmat);
+ BKE_camera_model_matrix(&scene->r, ob, names[i], obmat);
+ glMultMatrixf(obmat);
- /* right camera */
- glLoadMatrixf(rv3d->viewmat);
- BKE_camera_model_matrix(&scene->r, ob, STEREO_RIGHT_NAME, obmat);
- glMultMatrixf(obmat);
+ copy_m3_m3(vec_lr[i], vec);
+ copy_v3_v3(vec_lr[i][3], vec[3]);
- copy_m3_m3(vec_lr[1], vec);
- copy_v3_v3(vec_lr[1][3], vec[3]);
+ if (cam->stereo.convergence_mode == CAM_S3D_OFFAXIS) {
+ float shift_x = BKE_camera_shift_x(&scene->r, ob, names[i]) - cam->shiftx;
+ shift_x *= drawsize * scale[0] * fac;
+ for (j = 0; j < 4; j++)
+ vec_lr[i][j][0] += shift_x;
+ }
- if (cam->stereo.convergence_mode == CAM_S3D_OFFAXIS) {
- float shift_x = BKE_camera_shift_x(&scene->r, ob, STEREO_RIGHT_NAME) - cam->shiftx;
- shift_x *= drawsize * scale[0] * fac;
+ if (is_stereo3d_cameras) {
+ /* camera frame */
+ drawcamera_frame(vec_lr[i], GL_LINE_LOOP);
- for (i = 0; i < 4; i++)
- vec_lr[1][i][0] += shift_x;
- }
+ /* center point to camera frame */
+ drawcamera_framelines(vec_lr[i], tvec);
+ }
- if (is_stereo3d_cameras) {
- /* camera frame */
- drawcamera_frame(vec_lr[1], GL_LINE_LOOP);
+ /* connecting line */
+ mul_m4_v3(obmat, origin[i]);
- /* center point to camera frame */
- drawcamera_framelines(vec_lr[1], tvec);
+ /* convergence plane */
+ if (is_stereo3d_plane || is_stereo3d_volume)
+ for (j = 0; j < 4; j++)
+ mul_m4_v3(obmat, vec_lr[i][j]);
}
- /* connecting line */
- mul_m4_v3(obmat, origin[1]);
-
- /* convergence plane */
- if (is_stereo3d_plane || is_stereo3d_volume)
- for (i = 0; i < 4; i++)
- mul_m4_v3 (obmat, vec_lr[1][i]);
-
/* the remaining drawing takes place in the view space */
glLoadMatrixf(rv3d->viewmat);
@@ -1962,11 +1934,11 @@ static void drawcamera_stereo3d(Scene *scene, View3D *v3d, RegionView3D *rv3d, O
for (j = 0; j < 4; j++) {
sub_v3_v3v3(near_plane[j], vec_lr[i][j], origin[i]);
- mul_v3_fl(near_plane[j], cam->clipsta / scale);
+ mul_v3_fl(near_plane[j], cams[i]->clipsta / scale);
add_v3_v3(near_plane[j], origin[i]);
sub_v3_v3v3(far_plane[j], vec_lr[i][j], origin[i]);
- mul_v3_fl(far_plane[j], cam->clipend / scale);
+ mul_v3_fl(far_plane[j], cams[i]->clipend / scale);
add_v3_v3(far_plane[j], origin[i]);
}
@@ -1982,9 +1954,9 @@ static void drawcamera_stereo3d(Scene *scene, View3D *v3d, RegionView3D *rv3d, O
glDepthMask(0); /* disable write in zbuffer, needed for nice transp */
if (i == 0)
- glColor4f(1.0f, 0.0f, 0.0f, v3d->stereo3d_volume_alpha);
- else
glColor4f(0.0f, 1.0f, 1.0f, v3d->stereo3d_volume_alpha);
+ else
+ glColor4f(1.0f, 0.0f, 0.0f, v3d->stereo3d_volume_alpha);
drawcamera_frame(near_plane, GL_QUADS);
drawcamera_frame(far_plane, GL_QUADS);
@@ -2014,7 +1986,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
MovieClip *clip = BKE_object_movieclip_get(scene, base->object, false);
const bool is_stereo3d = drawcamera_is_stereo3d(scene, v3d, ob);
- const bool is_stereo3d_cameras = is_stereo3d && (v3d->stereo3d_flag & V3D_S3D_DISPCAMERAS);
+ const bool is_stereo3d_cameras = (v3d->stereo3d_flag & V3D_S3D_DISPCAMERAS) && (scene->r.views_setup == SCE_VIEWS_SETUP_BASIC);
/* draw data for movie clip set as active for scene */
if (clip) {
More information about the Bf-blender-cvs
mailing list