Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-18 19:52:00 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-18 19:52:00 +0400
commit539c94a0511fb98fdbae0ce78c815c45a805e36e (patch)
tree2ac8ef459046ea530af7d802d1381953ff7b6c87 /source/blender/render
parent02ce6fd59ca237f0bbaebfb50be9f74039d99e93 (diff)
Camera: some code refactoring, use an intermediate CameraParams struct instead
of long list of variables everywhere. Intention is to also let 3d view use this eventually, instead of duplicating code.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h1
-rw-r--r--source/blender/render/intern/include/render_types.h3
-rw-r--r--source/blender/render/intern/source/envmap.c12
-rw-r--r--source/blender/render/intern/source/initrender.c57
4 files changed, 56 insertions, 17 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index c00df7db87e..bcce7cbdfcc 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -188,6 +188,7 @@ void RE_SetDispRect (struct Render *re, rcti *disprect);
/* set up the viewplane/perspective matrix, three choices */
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
void RE_SetCamera(struct Render *re, struct Object *camera);
+void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend);
void RE_SetWindow (struct Render *re, rctf *viewplane, float clipsta, float clipend);
void RE_SetOrtho (struct Render *re, rctf *viewplane, float clipsta, float clipend);
void RE_SetPixelSize(struct Render *re, float pixsize);
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 7cad8c36df4..a931de04737 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -152,10 +152,7 @@ struct Render
int partx, party;
/* values for viewing */
- float lens;
- float sensor_x, sensor_y; /* image sensor size, same variable in camera */
float ycor; /* (scene->xasp / scene->yasp), multiplied with 'winy' */
- short sensor_fit;
float panophi, panosi, panoco, panodxp, panodxv;
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index 62cb29c3d5f..3512ffa865b 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -131,6 +131,7 @@ static void envmap_split_ima(EnvMap *env, ImBuf *ibuf)
static Render *envmap_render_copy(Render *re, EnvMap *env)
{
Render *envre;
+ float viewscale;
int cuberes;
envre= RE_NewRender("Envmap");
@@ -156,15 +157,8 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->lay= re->lay;
/* view stuff in env render */
- envre->lens= 16.0f;
- envre->sensor_x= 32.0f;
- if(env->type==ENV_PLANE)
- envre->lens*= env->viewscale;
- envre->ycor= 1.0f;
- envre->clipsta= env->clipsta; /* render_scene_set_window() respects this for now */
- envre->clipend= env->clipend;
-
- RE_SetCamera(envre, env->object);
+ viewscale= (env->type == ENV_PLANE)? env->viewscale: 1.0f;
+ RE_SetEnvmapCamera(envre, env->object, viewscale, env->clipsta, env->clipend);
/* callbacks */
envre->display_draw= re->display_draw;
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c
index 7bd8dad6502..e7572302676 100644
--- a/source/blender/render/intern/source/initrender.c
+++ b/source/blender/render/intern/source/initrender.c
@@ -451,15 +451,62 @@ struct Object *RE_GetCamera(Render *re)
return re->camera_override ? re->camera_override : re->scene->camera;
}
+static void re_camera_params_get(Render *re, CameraParams *params, Object *cam_ob)
+{
+ copy_m4_m4(re->winmat, params->winmat);
+
+ re->clipsta= params->clipsta;
+ re->clipend= params->clipend;
+
+ re->ycor= params->ycor;
+ re->viewdx= params->viewdx;
+ re->viewdy= params->viewdy;
+ re->viewplane= params->viewplane;
+
+ object_camera_mode(&re->r, cam_ob);
+}
+
+void RE_SetEnvmapCamera(Render *re, Object *cam_ob, float viewscale, float clipsta, float clipend)
+{
+ CameraParams params;
+
+ /* setup parameters */
+ camera_params_init(&params);
+ camera_params_from_object(&params, cam_ob);
+
+ params.lens= 16.0f*viewscale;
+ params.sensor_x= 32.0f;
+ params.sensor_y= 32.0f;
+ params.sensor_fit = CAMERA_SENSOR_FIT_AUTO;
+ params.clipsta= clipsta;
+ params.clipend= clipend;
+
+ /* compute matrix, viewplane, .. */
+ camera_params_compute(&params, re->winx, re->winy, 1.0f, 1.0f);
+
+ /* extract results */
+ re_camera_params_get(re, &params, cam_ob);
+}
+
/* call this after InitState() */
/* per render, there's one persistent viewplane. Parts will set their own viewplanes */
-void RE_SetCamera(Render *re, Object *camera)
+void RE_SetCamera(Render *re, Object *cam_ob)
{
- object_camera_mode(&re->r, camera);
+ CameraParams params;
+
+ /* setup parameters */
+ camera_params_init(&params);
+ camera_params_from_object(&params, cam_ob);
+
+ params.use_fields= (re->r.mode & R_FIELDS);
+ params.field_second= (re->flag & R_SEC_FIELD);
+ params.field_odd= (re->r.mode & R_ODDFIELD);
+
+ /* compute matrix, viewplane, .. */
+ camera_params_compute(&params, re->winx, re->winy, re->r.xasp, re->r.yasp);
- object_camera_matrix(&re->r, camera, re->winx, re->winy, re->flag & R_SEC_FIELD,
- re->winmat, &re->viewplane, &re->clipsta, &re->clipend,
- &re->lens, &re->sensor_x, &re->sensor_y, &re->sensor_fit, &re->ycor, &re->viewdx, &re->viewdy);
+ /* extract results */
+ re_camera_params_get(re, &params, cam_ob);
}
void RE_SetPixelSize(Render *re, float pixsize)