[Bf-blender-cvs] [6311911] multiview: Merge remote-tracking branch 'upstream/master' into multiview
Dalai Felinto
noreply at git.blender.org
Fri Jul 25 04:27:21 CEST 2014
Commit: 63119114665b0ae1bd1e784b00326792a7195d92
Author: Dalai Felinto
Date: Thu Jul 24 23:22:21 2014 -0300
Branches: multiview
https://developer.blender.org/rB63119114665b0ae1bd1e784b00326792a7195d92
Merge remote-tracking branch 'upstream/master' into multiview
(removed the multiview splashscreen as well to prevent future issues and
not to increase the git repo size by much)
Conflicts:
release/datafiles/splash.png
source/blender/blenloader/intern/versioning_270.c
source/blender/makesdna/DNA_scene_types.h
source/blender/makesrna/intern/rna_scene.c
source/blender/makesrna/intern/rna_userdef.c
source/blender/render/intern/include/render_types.h
source/blender/render/intern/source/pipeline.c
source/blender/windowmanager/intern/wm_draw.c
===================================================================
===================================================================
diff --cc release/datafiles/locale
index cb1967c,5ea1456..b02bd60
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit cb1967cc63a6d2d75d2b59cdf91c5f5645285aea
-Subproject commit 5ea1456cf5bf9caa32d4988284cc0b75637dd45d
++Subproject commit b02bd6054548c2daa4a223e035835b626cc9476e
diff --cc release/scripts/addons
index c50944e,59ff66f..fcec730
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit c50944e808d6c74148237e85866e893628f0fee6
-Subproject commit 59ff66fa7aca6a56dfa516ee4a456428516d2c6f
++Subproject commit fcec7304a00de3b612c6a5435328fdfd753fecd3
diff --cc release/scripts/addons_contrib
index 31545d2,9c1b725..103b024
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 31545d25c9cb41d271a3f3ef84d327708572290e
-Subproject commit 9c1b7252bb510cc527c4ef2fd5aa3b586d095e98
++Subproject commit 103b024c9476ad849152fbba329e9fae2ebe137a
diff --cc source/blender/blenkernel/intern/camera.c
index 3ac3480,b20ba40..f05d802
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@@ -600,165 -593,3 +600,169 @@@ bool BKE_camera_view_frame_fit_to_scene
}
}
}
+
+/* transforms the camera matrix to the correct stereo eye to be rendered */
+void BKE_camera_multiview_basic(Object *camera, const bool left)
+{
+ Camera *data = (Camera *)camera->data;
+ float *r_shift = &data->shiftx;
+ float interocular_distance, convergence_distance;
+ float angle = 0.0f;
+ short convergence_mode, pivot;
+ float tmpmat[4][4];
+
- float rotmat[3][3] = MAT3_UNITY;
++ float rotmat[3][3];
+ float fac = 1.0f;
+
++ unit_m3(rotmat);
++
+ interocular_distance = data->stereo.interocular_distance;
+ convergence_distance = data->stereo.convergence_distance;
+ convergence_mode = data->stereo.convergence_mode;
+ pivot = data->stereo.pivot;
+
+ if (((pivot == CAM_S3D_PIVOT_LEFT) && left) ||
+ ((pivot == CAM_S3D_PIVOT_RIGHT) && !left))
+ return;
+
+ if (pivot == CAM_S3D_PIVOT_CENTER)
+ fac = 0.5f;
+
+ /* rotation */
+ if (convergence_mode == CAM_S3D_TOE) {
+ angle = -atanf((interocular_distance * 0.5f) / convergence_distance);
+
+ if (left)
+ angle = -angle;
+
+ rotmat[0][0] = cosf(angle * 2.0f * fac);
+ rotmat[2][0] =-sinf(angle * 2.0f * fac);
+ rotmat[0][2] = sinf(angle * 2.0f * fac);
+ rotmat[2][2] = cosf(angle * 2.0f * fac);
+ }
+
+ copy_m4_m4(tmpmat, camera->obmat);
+ mul_m4_m4m3(camera->obmat, tmpmat, rotmat);
+
+ /* translation */
+ if (left) {
+ translate_m4(camera->obmat,
+ -interocular_distance * cosf(angle) * fac, 0.0f,
+ interocular_distance * sinf(angle) * fac);
+ }
+ else {
+ translate_m4(camera->obmat,
+ interocular_distance * cosf(angle) * fac, 0.0f,
+ -interocular_distance * sinf(angle) * fac);
+ }
+
+ /* prepare the camera shift for the projection matrix */
+ /* Note: in viewport, parallel renders as offaxis, but in render it does parallel */
+ if (convergence_mode == CAM_S3D_OFFAXIS) {
+ if (left)
+ *r_shift += ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac;
+ else
+ *r_shift -= ((interocular_distance / data->sensor_x) * (data->lens / convergence_distance)) * fac;
+ }
+}
+
+void BKE_camera_stereo_matrices(Object *camera, float r_viewmat[4][4], float *r_shift, const bool left)
+{
+ /* viewmat = MODELVIEW_MATRIX */
+ Camera *data = (Camera *)camera->data;
+ float interocular_distance, convergence_distance;
+ float angle = 0.0f;
+ short convergence_mode, pivot;
+ float tmpviewmat[4][4];
- float transmat[4][4] = MAT4_UNITY;
++ float transmat[4][4];
+ float fac = 1.0f;
+
++ unit_m4(transmat);
++
+ interocular_distance = data->stereo.interocular_distance;
+ convergence_distance = data->stereo.convergence_distance;
+ convergence_mode = data->stereo.convergence_mode;
+ pivot = data->stereo.pivot;
+
+ invert_m4_m4(tmpviewmat, camera->obmat);
+
+ if (((pivot == CAM_S3D_PIVOT_LEFT) && left) ||
+ ((pivot == CAM_S3D_PIVOT_RIGHT) && !left)) {
+ copy_m4_m4(r_viewmat, tmpviewmat);
+ return;
+ }
+
+ if (pivot == CAM_S3D_PIVOT_CENTER)
+ fac = 0.5f;
+
+ /* rotation */
+ if (convergence_mode == CAM_S3D_TOE) {
+ angle = atanf((interocular_distance * 0.5f) / convergence_distance);
+
+ if (left)
+ angle = -angle;
+
+ transmat[0][0] = cosf(angle * 2.0f * fac);
+ transmat[2][0] =-sinf(angle * 2.0f * fac);
+ transmat[0][2] = sinf(angle * 2.0f * fac);
+ transmat[2][2] = cosf(angle * 2.0f * fac);
+ }
+
+ /* translation */
+ if (left) {
+ transmat[3][0] = cosf(angle) * interocular_distance * fac;
+ transmat[3][2] = sinf(angle) * interocular_distance * fac;
+ }
+ else {
+ transmat[3][0] = -cosf(angle) * interocular_distance * fac;
+ transmat[3][2] = -sinf(angle) * interocular_distance * fac;
+ }
+
+ /* apply */
+ mul_m4_m4m4(r_viewmat, transmat, tmpviewmat);
+
+ /* prepare the camera shift for the projection matrix */
+ /* Note: in viewport, parallel renders as offaxis, but in render it does parallel */
+ if (ELEM(convergence_mode, CAM_S3D_OFFAXIS, CAM_S3D_PARALLEL)) {
+ if (left)
+ *r_shift += (interocular_distance / data->sensor_x) * (data->lens / convergence_distance) * fac;
+ else
+ *r_shift -= (interocular_distance / data->sensor_x) * (data->lens / convergence_distance) * fac;
+ }
+}
+
+Object *BKE_camera_multiview_advanced(Scene *scene, RenderData *rd, Object *camera, const char *suffix)
+{
+ SceneRenderView *srv;
+ char name[MAX_NAME];
+ int len_name, len_suffix;
+
+ len_name = BLI_strnlen(camera->id.name, sizeof(camera->id.name));
+
+ for (srv = rd->views.first; srv; srv = srv->next)
+ {
+ len_suffix = BLI_strnlen(srv->suffix, sizeof(srv->suffix));
+
+ if (len_name < len_suffix)
+ continue;
+
+ if (strcmp(camera->id.name + (len_name - len_suffix), srv->suffix) == 0) {
+ BLI_snprintf(name, sizeof(name), "%.*s%s", (len_name - len_suffix), camera->id.name, suffix);
+ break;
+ }
+ }
+
+ if (name[0] != '\0') {
+ Base *base;
+ Object *ob;
+ for (base = scene->base.first; base; base = base->next) {
+ ob = base->object;
+ if (strcmp(ob->id.name, name) == 0) {
+ return ob;
+ }
+ }
+ }
+
+ return camera;
+}
+
diff --cc source/blender/blenkernel/intern/image.c
index 81e8c69,805c125..6d03318
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@@ -1014,7 -1014,7 +1014,7 @@@ int BKE_imtype_to_ftype(const char imty
else if (imtype == R_IMF_IMTYPE_TIFF)
return TIF;
#endif
- else if (ELEM3(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW))
- else if (imtype == R_IMF_IMTYPE_OPENEXR || imtype == R_IMF_IMTYPE_MULTILAYER)
++ else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW))
return OPENEXR;
#ifdef WITH_CINEON
else if (imtype == R_IMF_IMTYPE_CINEON)
@@@ -1293,7 -1289,7 +1293,7 @@@ static bool do_add_image_extension(cha
}
#endif
#ifdef WITH_OPENEXR
- else if (ELEM3(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW)) {
- else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER)) {
++ else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW)) {
if (!BLI_testextensie(string, extension_test = ".exr"))
extension = extension_test;
}
@@@ -1932,7 -1928,7 +1932,7 @@@ int BKE_imbuf_write(ImBuf *ibuf, const
}
#endif
#ifdef WITH_OPENEXR
- else if (ELEM3(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW)) {
- else if (imtype == R_IMF_IMTYPE_OPENEXR || imtype == R_IMF_IMTYPE_MULTILAYER) {
++ else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER, R_IMF_IMTYPE_MULTIVIEW)) {
ibuf->ftype = OPENEXR;
if (imf->depth == R_IMF_CHAN_DEPTH_16)
ibuf->ftype |= OPENEXR_HALF;
diff --cc source/blender/blenloader/intern/versioning_270.c
index 9dd877f,2e4d38e..5523ecd
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@@ -42,8 -42,8 +43,10 @@@
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_modifier_types.h"
+ #include "DNA_linestyle_types.h"
+ #include "DNA_actuator_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_view3d_types.h"
#include "DNA_genfile.h"
@@@ -292,62 -342,18 +346,69 @@@ void blo_do_versions_270(FileData *fd,
}
}
- {
+ if (!MAIN_VERSION_ATLEAST(main, 271, 3)) {
+ Brush *br;
+
+ for (br = main->brush.first; br; br = br->id.next) {
+ br->fill_threshold = 0.2f;
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "RenderData", "int", "preview_start_resolution")) {
Scene *scene;
for (scene = main->scene.first; scene; scene = scene->id.next) {
- int num_layers = BLI_countlist(&scene->r.layers);
- scene->r.actlay = min_ff(scene->r.actlay, num_layers - 1);
+ scene->r.preview_start_resolution = 64;
}
}
+
+ {
+ SceneRenderView *srv;
+ Camera *cam;
+ bScreen *screen;
+ Scene *scene;
+
+ if (!DNA_struct_elem_find(fd->filesdna, "RenderData", "ListBase", "views")) {
+ for (scene = main->scene.first; scene; scene = scene->id.next) {
+ BKE_scene_add_render_view(scene, STEREO_LEFT_NAME);
+ srv = (SceneRenderView *)scene->r.views.first;
+ BLI_strncpy(srv->suffix, "_L", sizeof(srv->suffix));
+
+ BKE_scene_add_render_view(scene, STEREO_RIGHT_NAME);
+ srv = (SceneRenderView *)scene->r.views.last;
+ BLI_strncpy(srv->suffix, "_R", sizeof(srv->suffix));
+ }
+ }
+
+ for (screen = main->screen.first; screen; screen = screen->id.next) {
+ ScrArea *sa;
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
+ SpaceLink *sl;
+
+ for (sl = sa->spacedata.first; sl; sl= sl->next) {
+ switch (sl->spacetype) {
+ case SPACE_VIEW3D:
+ {
+ View3D *v3d = (View3D*) sl;
+ v3d->stereo_camera = STEREO_3D_ID;
+ break;
+ }
+ case SPACE_IMAGE:
+ {
+ SpaceImage *sima = (SpaceImage *) sl;
+ sima->iuser.fl
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list