[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41384] branches/soc-2011-tomato: Camera tracking integration
Sergey Sharybin
g.ulairi at gmail.com
Sun Oct 30 15:11:17 CET 2011
Revision: 41384
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41384
Author: nazgul
Date: 2011-10-30 14:11:16 +0000 (Sun, 30 Oct 2011)
Log Message:
-----------
Camera tracking integration
===========================
Camera sensor size changes:
- Now blender camera has got vertical sensor size property
and setting to control how FOV is getting calculated
(depending on aspect ratio, using horizontal sensor size or
vertical only).
- Made changes in game engine and uv project modifier as well
- Presets should be updated (don't have settings by hand right now
and the internet in debalie is really fails this year)
Modified Paths:
--------------
branches/soc-2011-tomato/release/scripts/startup/bl_operators/presets.py
branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_data_camera.py
branches/soc-2011-tomato/source/blender/blenkernel/BKE_object.h
branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c
branches/soc-2011-tomato/source/blender/blenlib/BLI_math_rotation.h
branches/soc-2011-tomato/source/blender/blenlib/intern/math_rotation.c
branches/soc-2011-tomato/source/blender/blenlib/intern/uvproject.c
branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
branches/soc-2011-tomato/source/blender/editors/sculpt_paint/paint_image.c
branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_edit.c
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_intern.h
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_view.c
branches/soc-2011-tomato/source/blender/makesdna/DNA_camera_types.h
branches/soc-2011-tomato/source/blender/makesrna/intern/rna_camera.c
branches/soc-2011-tomato/source/blender/modifiers/intern/MOD_uvproject.c
branches/soc-2011-tomato/source/blender/render/intern/include/render_types.h
branches/soc-2011-tomato/source/blender/render/intern/source/initrender.c
branches/soc-2011-tomato/source/gameengine/Converter/BL_BlenderDataConversion.cpp
branches/soc-2011-tomato/source/gameengine/Ketsji/KX_Camera.cpp
branches/soc-2011-tomato/source/gameengine/Ketsji/KX_Camera.h
branches/soc-2011-tomato/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
branches/soc-2011-tomato/source/gameengine/Rasterizer/RAS_CameraData.h
branches/soc-2011-tomato/source/gameengine/Rasterizer/RAS_FramingManager.cpp
branches/soc-2011-tomato/source/gameengine/Rasterizer/RAS_FramingManager.h
branches/soc-2011-tomato/source/gameengine/VideoTexture/ImageRender.cpp
Modified: branches/soc-2011-tomato/release/scripts/startup/bl_operators/presets.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_operators/presets.py 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_operators/presets.py 2011-10-30 14:11:16 UTC (rev 41384)
@@ -206,7 +206,9 @@
]
preset_values = [
- "cam.sensor_width"
+ "cam.sensor_width",
+ "cam.sensor_height",
+ "cam.fov_mode"
]
preset_subdir = "camera"
Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_data_camera.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_data_camera.py 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_data_camera.py 2011-10-30 14:11:16 UTC (rev 41384)
@@ -129,8 +129,12 @@
row.operator("camera.preset_add", text="", icon="ZOOMIN")
row.operator("camera.preset_add", text="", icon="ZOOMOUT").remove_active = True
- layout.prop(cam, "sensor_width")
+ layout.prop(cam, "fov_mode")
+ col = layout.column(align=True)
+ col.prop(cam, "sensor_width")
+ col.prop(cam, "sensor_height")
+
layout.label(text="Clipping:")
row = layout.row(align=True)
row.prop(cam, "clip_start", text="Start")
Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_object.h 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_object.h 2011-10-30 14:11:16 UTC (rev 41384)
@@ -145,7 +145,8 @@
float *clipsta, float *clipend, float *lens, float *sensor_x);
void object_camera_matrix(
struct RenderData *rd, struct Object *camera, int winx, int winy, short field_second,
- float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens, float *sensor_x, float *ycor,
+ float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens,
+ float *sensor_x, float *sensor_y, short *fov_mode, float *ycor,
float *viewdx, float *viewdy);
void camera_view_frame_ex(struct Scene *scene, struct Camera *camera, float drawsize, const short do_clip, const float scale[3],
Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/object.c 2011-10-30 14:11:16 UTC (rev 41384)
@@ -2977,13 +2977,17 @@
}
void object_camera_intrinsics(Object *camera, Camera **cam_r, short *is_ortho, float *shiftx, float *shifty,
- float *clipsta, float *clipend, float *lens, float *sensor_x)
+ float *clipsta, float *clipend, float *lens, float *sensor_x, float *sensor_y, short *fov_mode)
{
Camera *cam= NULL;
(*shiftx)= 0.0f;
(*shifty)= 0.0f;
+ (*sensor_x)= DEFAULT_SENSOR_WIDTH;
+ (*sensor_y)= DEFAULT_SENSOR_HEIGHT;
+ (*fov_mode)= CAMERA_FOV_AUTO;
+
if(camera->type==OB_CAMERA) {
cam= camera->data;
@@ -3005,8 +3009,10 @@
(*shifty)=cam->shifty;
(*lens)= cam->lens;
(*sensor_x)= cam->sensor_x;
+ (*sensor_y)= cam->sensor_y;
(*clipsta)= cam->clipsta;
(*clipend)= cam->clipend;
+ (*fov_mode)= cam->fov_mode;
}
else if(camera->type==OB_LAMP) {
Lamp *la= camera->data;
@@ -3035,9 +3041,10 @@
/* 'lens' may be set for envmap only */
void object_camera_matrix(
RenderData *rd, Object *camera, int winx, int winy, short field_second,
- float winmat[][4], rctf *viewplane, float *clipsta, float *clipend, float *lens, float *sensor_x, float *ycor,
- float *viewdx, float *viewdy
-) {
+ float winmat[][4], rctf *viewplane, float *clipsta, float *clipend, float *lens,
+ float *sensor_x, float *sensor_y, short *fov_mode, float *ycor,
+ float *viewdx, float *viewdy)
+{
Camera *cam=NULL;
float pixsize;
float shiftx=0.0, shifty=0.0, winside, viewfac;
@@ -3048,22 +3055,36 @@
if(rd->mode & R_FIELDS)
(*ycor) *= 2.0f;
- object_camera_intrinsics(camera, &cam, &is_ortho, &shiftx, &shifty, clipsta, clipend, lens, sensor_x);
+ object_camera_intrinsics(camera, &cam, &is_ortho, &shiftx, &shifty, clipsta, clipend, lens, sensor_x, sensor_y, fov_mode);
/* ortho only with camera available */
if(cam && is_ortho) {
- if(rd->xasp*winx >= rd->yasp*winy) {
+ if((*fov_mode)==CAMERA_FOV_AUTO) {
+ if(rd->xasp*winx >= rd->yasp*winy) viewfac= winx;
+ else viewfac= (*ycor) * winy;
+ }
+ else if((*fov_mode)==CAMERA_FOV_HOR) {
viewfac= winx;
}
else {
viewfac= (*ycor) * winy;
}
+
/* ortho_scale == 1.0 means exact 1 to 1 mapping */
pixsize= cam->ortho_scale/viewfac;
}
else {
- if(rd->xasp*winx >= rd->yasp*winy) viewfac= ((*lens) * winx) / (*sensor_x);
- else viewfac= (*ycor) * ((*lens) * winy) / (*sensor_x);
+ if((*fov_mode)==CAMERA_FOV_AUTO) {
+ if(rd->xasp*winx >= rd->yasp*winy) viewfac= ((*lens) * winx) / (*sensor_x);
+ else viewfac= (*ycor) * ((*lens) * winy) / (*sensor_x);
+ }
+ else if((*fov_mode)==CAMERA_FOV_HOR) {
+ viewfac= ((*lens) * winx) / (*sensor_x);
+ }
+ else if((*fov_mode)==CAMERA_FOV_VERT) {
+ viewfac= ((*lens) * winy) / (*sensor_y);
+ }
+
pixsize= (*clipsta) / viewfac;
}
Modified: branches/soc-2011-tomato/source/blender/blenlib/BLI_math_rotation.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenlib/BLI_math_rotation.h 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenlib/BLI_math_rotation.h 2011-10-30 14:11:16 UTC (rev 41384)
@@ -179,8 +179,8 @@
void quat_apply_track(float quat[4], short axis, short upflag);
void vec_apply_track(float vec[3], short axis);
-float focallength_to_hfov(float focal_length, float sensor_x);
-float hfov_to_focallength(float hfov, float sensor_x);
+float focallength_to_fov(float focal_length, float sensor);
+float fov_to_focallength(float fov, float sensor);
float angle_wrap_rad(float angle);
float angle_wrap_deg(float angle);
Modified: branches/soc-2011-tomato/source/blender/blenlib/intern/math_rotation.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenlib/intern/math_rotation.c 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenlib/intern/math_rotation.c 2011-10-30 14:11:16 UTC (rev 41384)
@@ -1688,14 +1688,14 @@
}
/* lens/angle conversion (radians) */
-float focallength_to_hfov(float focal_length, float sensor_x)
+float focallength_to_fov(float focal_length, float sensor)
{
- return 2.0f * atanf((sensor_x/2.0f) / focal_length);
+ return 2.0f * atanf((sensor/2.0f) / focal_length);
}
-float hfov_to_focallength(float hfov, float sensor_x)
+float fov_to_focallength(float hfov, float sensor)
{
- return (sensor_x/2.0f) / tanf(hfov * 0.5f);
+ return (sensor/2.0f) / tanf(hfov * 0.5f);
}
/* 'mod_inline(-3,4)= 1', 'fmod(-3,4)= -3' */
Modified: branches/soc-2011-tomato/source/blender/blenlib/intern/uvproject.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenlib/intern/uvproject.c 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenlib/intern/uvproject.c 2011-10-30 14:11:16 UTC (rev 41384)
@@ -141,7 +141,7 @@
uci.do_pano = (camera->flag & CAM_PANORAMA);
uci.do_persp = (camera->type==CAM_PERSP);
- uci.camangle= focallength_to_hfov(camera->lens, camera->sensor_x) / 2.0f;
+ uci.camangle= focallength_to_fov(camera->lens, camera->sensor_x) / 2.0f;
uci.camsize= uci.do_persp ? tanf(uci.camangle) : camera->ortho_scale;
/* account for scaled cameras */
Modified: branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c 2011-10-30 14:11:16 UTC (rev 41384)
@@ -12360,9 +12360,11 @@
}
for(cam= main->camera.first; cam; cam= cam->id.next) {
- if (cam->sensor_x < 0.01) {
- cam->sensor_x = 32.f;
- }
+ if (cam->sensor_x < 0.01)
+ cam->sensor_x = DEFAULT_SENSOR_WIDTH;
+
+ if (cam->sensor_y < 0.01)
+ cam->sensor_y = DEFAULT_SENSOR_HEIGHT;
}
for (clip= main->movieclip.first; clip; clip= clip->id.next) {
Modified: branches/soc-2011-tomato/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/sculpt_paint/paint_image.c 2011-10-30 12:42:56 UTC (rev 41383)
+++ branches/soc-2011-tomato/source/blender/editors/sculpt_paint/paint_image.c 2011-10-30 14:11:16 UTC (rev 41384)
@@ -57,6 +57,7 @@
#include "IMB_imbuf_types.h"
#include "DNA_brush_types.h"
+#include "DNA_camera_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_node_types.h"
@@ -3000,7 +3001,8 @@
Object *camera= ps->scene->camera;
/* dont actually use these */
- float _viewdx, _viewdy, _ycor, _lens=0.0f, _sensor_x=0.0f;
+ float _viewdx, _viewdy, _ycor, _lens=0.0f, _sensor_x=DEFAULT_SENSOR_WIDTH, _sensor_y= DEFAULT_SENSOR_HEIGHT;
+ short _fov_mode= CAMERA_FOV_AUTO;
rctf _viewplane;
/* viewmat & viewinv */
@@ -3012,7 +3014,7 @@
object_camera_mode(&ps->scene->r, camera);
object_camera_matrix(&ps->scene->r, camera, ps->winx, ps->winy, 0,
winmat, &_viewplane, &ps->clipsta, &ps->clipend,
- &_lens, &_sensor_x, &_ycor, &_viewdx, &_viewdy);
+ &_lens, &_sensor_x, &_sensor_x, &_fov_mode, &_ycor, &_viewdx, &_viewdy);
ps->is_ortho= (ps->scene->r.mode & R_ORTHO) ? 1 : 0;
}
Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c 2011-10-30 12:42:56 UTC (rev 41383)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list