diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-11-19 22:35:42 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-11-19 22:35:42 +0400 |
commit | 5d2a155f2bcc2d6d77d3a3753c23027b06942540 (patch) | |
tree | f7516f66a00293452972ac009e4a40faeeccbe45 /source/blender/blenkernel | |
parent | d9e99abe3753591d510dbb58813bbc29e3381b57 (diff) |
Camera: some more refactoring, mostly in the function that computes the camera
border, now we just get the border coordinates from comparing the viewport and
camera viewplanes.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_camera.h | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/camera.c | 32 |
2 files changed, 26 insertions, 14 deletions
diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h index 8aec576b963..72e22dc1583 100644 --- a/source/blender/blenkernel/BKE_camera.h +++ b/source/blender/blenkernel/BKE_camera.h @@ -92,20 +92,22 @@ typedef struct CameraParams { int field_second; int field_odd; - /* compute result */ + /* computed viewplane */ float ycor; - float viewdx; float viewdy; rctf viewplane; + /* computed matrix */ float winmat[4][4]; } CameraParams; void camera_params_init(CameraParams *params); void camera_params_from_object(CameraParams *params, struct Object *camera); void camera_params_from_view3d(CameraParams *params, struct View3D *v3d, struct RegionView3D *rv3d); -void camera_params_compute(CameraParams *params, int winx, int winy, float aspx, float aspy); + +void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy); +void camera_params_compute_matrix(CameraParams *params); /* Camera View Frame */ diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index 1bfeea727ec..da7c0ab1774 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -241,7 +241,7 @@ void camera_params_from_object(CameraParams *params, Object *ob) void camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D *rv3d) { - /* perspective view */ + /* common */ params->lens= v3d->lens; params->clipsta= v3d->near; params->clipend= v3d->far; @@ -250,28 +250,32 @@ void camera_params_from_view3d(CameraParams *params, View3D *v3d, RegionView3D * /* camera view */ camera_params_from_object(params, v3d->camera); - params->zoom= BKE_screen_view3d_zoom_to_fac((float)rv3d->camzoom) * 2.0f; - params->zoom= 1.0f/params->zoom; + params->zoom= BKE_screen_view3d_zoom_to_fac((float)rv3d->camzoom); + + params->offsetx= 2.0f*rv3d->camdx*params->zoom; + params->offsety= 2.0f*rv3d->camdy*params->zoom; - params->offsetx= rv3d->camdx; - params->offsety= rv3d->camdy; + params->shiftx *= params->zoom; + params->shifty *= params->zoom; - params->shiftx *= 0.5f; - params->shifty *= 0.5f; + params->zoom= 1.0f/params->zoom; } else if(rv3d->persp==RV3D_ORTHO) { /* orthographic view */ params->clipend *= 0.5f; // otherwise too extreme low zbuffer quality params->clipsta= - params->clipend; - params->is_ortho= 1; + params->is_ortho= TRUE; params->ortho_scale = rv3d->dist; + params->zoom= 2.0f; + } + else { + /* perspective view */ + params->zoom= 2.0f; } - - params->zoom *= 2.0f; } -void camera_params_compute(CameraParams *params, int winx, int winy, float xasp, float yasp) +void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float xasp, float yasp) { rctf viewplane; float pixsize, viewfac, sensor_size, dx, dy; @@ -344,6 +348,12 @@ void camera_params_compute(CameraParams *params, int winx, int winy, float xasp, params->viewdx= pixsize; params->viewdy= params->ycor * pixsize; params->viewplane= viewplane; +} + +/* viewplane is assumed to be already computed */ +void camera_params_compute_matrix(CameraParams *params) +{ + rctf viewplane= params->viewplane; /* compute projection matrix */ if(params->is_ortho) |