[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41389] branches/soc-2011-tomato/source/ blender: Camera tracking integration
Sergey Sharybin
g.ulairi at gmail.com
Sun Oct 30 23:13:53 CET 2011
Revision: 41389
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41389
Author: nazgul
Date: 2011-10-30 22:13:52 +0000 (Sun, 30 Oct 2011)
Log Message:
-----------
Camera tracking integration
===========================
Update rest of places to reflect sensor height and fov mode.
Modified Paths:
--------------
branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_view.c
Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c 2011-10-30 21:38:01 UTC (rev 41388)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c 2011-10-30 22:13:52 UTC (rev 41389)
@@ -3090,6 +3090,14 @@
/* viewplane fully centered, zbuffer fills in jittered between -.5 and +.5 */
winside= MAX2(winx, winy);
+
+ if(cam) {
+ if(cam->fov_mode==CAMERA_FOV_HOR)
+ winside= winx;
+ else if(cam->fov_mode==CAMERA_FOV_VERT)
+ winside= winy;
+ }
+
viewplane->xmin= -0.5f*(float)winx + shiftx*winside;
viewplane->ymin= -0.5f*(*ycor)*(float)winy + shifty*winside;
viewplane->xmax= 0.5f*(float)winx + shiftx*winside;
@@ -3133,7 +3141,17 @@
float aspx= (float) scene->r.xsch*scene->r.xasp;
float aspy= (float) scene->r.ysch*scene->r.yasp;
- if(aspx < aspy) {
+ if(camera->fov_mode==CAMERA_FOV_AUTO) {
+ if(aspx < aspy) {
+ r_asp[0]= aspx / aspy;
+ r_asp[1]= 1.0;
+ }
+ else {
+ r_asp[0]= 1.0;
+ r_asp[1]= aspy / aspx;
+ }
+ }
+ else if(camera->fov_mode==CAMERA_FOV_AUTO) {
r_asp[0]= aspx / aspy;
r_asp[1]= 1.0;
}
@@ -3159,16 +3177,18 @@
else {
/* that way it's always visible - clipsta+0.1 */
float fac;
+ float half_sensor= 0.5f*((camera->fov_mode==CAMERA_FOV_VERT) ? (camera->sensor_y) : (camera->sensor_x));
+
*r_drawsize= drawsize / ((scale[0] + scale[1] + scale[2]) / 3.0f);
if(do_clip) {
/* fixed depth, variable size (avoids exceeding clipping range) */
depth = -(camera->clipsta + 0.1f);
- fac = depth / (camera->lens/-16.0f * scale[2]);
+ fac = depth / (camera->lens/(-half_sensor) * scale[2]);
}
else {
/* fixed size, variable depth (stays a reasonable size in the 3D view) */
- depth= *r_drawsize * camera->lens/-16.0f * scale[2];
+ depth= *r_drawsize * camera->lens/(-half_sensor) * scale[2];
fac= *r_drawsize;
}
Modified: branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c 2011-10-30 21:38:01 UTC (rev 41388)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c 2011-10-30 22:13:52 UTC (rev 41389)
@@ -1227,18 +1227,15 @@
}
if (ca && (ca->flag & CAM_SHOWSENSOR)) {
/* assume fixed sensor width for now */
- float aspx = (float) scene->r.xsch*scene->r.xasp;
- float aspy = (float) scene->r.ysch*scene->r.yasp;
+
+ float sensor_aspect = ca->sensor_x / ca->sensor_y;
float sensor_scale = (x2i-x1i) / ca->sensor_x;
- float sensor_height, ymid, sy1, sy2;
+ float sensor_height = sensor_scale * ca->sensor_y;
- if(aspx < aspy) sensor_height = ca->sensor_x * sensor_scale * aspx / aspy;
- else sensor_height = ca->sensor_x * sensor_scale * aspy / aspx;
+ float ymid = y1i + (y2i-y1i)/2.f;
+ float sy1= ymid - sensor_height/2.f;
+ float sy2= ymid + sensor_height/2.f;
- ymid = y1i + (y2i-y1i)/2.f;
- sy1= ymid - sensor_height/2.f;
- sy2= ymid + sensor_height/2.f;
-
UI_ThemeColorShade(TH_WIRE, 100);
uiDrawBox(GL_LINE_LOOP, x1i, sy1, x2i, sy2, 2.0);
Modified: branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_view.c 2011-10-30 21:38:01 UTC (rev 41388)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_view.c 2011-10-30 22:13:52 UTC (rev 41389)
@@ -970,7 +970,10 @@
float winx= (float)winxi, winy= (float)winyi;
int orth= 0;
short fov_mode= CAMERA_FOV_AUTO;
-
+
+ /* currnetly using sensor size (depends on fov calculating method) */
+ float sensor= DEFAULT_SENSOR_WIDTH;
+
lens= v3d->lens;
*clipsta= v3d->near;
@@ -998,6 +1001,8 @@
*clipsta= cam->clipsta;
*clipend= cam->clipend;
fov_mode= cam->fov_mode;
+
+ sensor= (cam->fov_mode==CAMERA_FOV_VERT) ? (cam->sensor_y) : (cam->sensor_x);
}
}
}
@@ -1084,8 +1089,8 @@
dy += cam->shifty * cam->ortho_scale;
}
else {
- dx += cam->shiftx * (cam->clipsta / cam->lens) * sensor_x;
- dy += cam->shifty * (cam->clipsta / cam->lens) * sensor_x;
+ dx += cam->shiftx * (cam->clipsta / cam->lens) * sensor;
+ dy += cam->shifty * (cam->clipsta / cam->lens) * sensor;
}
x1+= dx;
@@ -1103,7 +1108,14 @@
*pixsize= 1.0f/viewfac;
}
else {
- viewfac= (((winx >= winy)? winx: winy)*lens)/32.0f;
+ float size= ((winx >= winy)? winx: winy);
+
+ if(fov_mode==CAMERA_FOV_HOR)
+ size= winx;
+ else if(fov_mode==CAMERA_FOV_VERT)
+ size= winy;
+
+ viewfac= (size*lens)/sensor;
*pixsize= *clipsta/viewfac;
}
}
More information about the Bf-blender-cvs
mailing list