diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-07-02 23:39:22 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-07-03 00:57:06 +0400 |
commit | 0c78ba1ba87f516809c7e6ea98729e872b4bd5e3 (patch) | |
tree | efab8c25da68d681d3395dbe6b9634427cd7e93d /source/blender/editors/space_view3d/view3d_project.c | |
parent | e81b9386318a00beb949e23f08ddb0aba7bfc0a9 (diff) |
Correct recent fix for knife in camera ortho mode
now use real view clip ranges for win-to-ray segment
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_project.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_project.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/source/blender/editors/space_view3d/view3d_project.c b/source/blender/editors/space_view3d/view3d_project.c index 9b14df402ec..073d4ed5b79 100644 --- a/source/blender/editors/space_view3d/view3d_project.c +++ b/source/blender/editors/space_view3d/view3d_project.c @@ -315,23 +315,27 @@ static void view3d_win_to_ray_segment(const ARegion *ar, View3D *v3d, const floa if (rv3d->is_persp) { copy_v3_v3(r_ray_co, rv3d->viewinv[3]); + } + else { + r_ray_co[0] = 2.0f * mval[0] / ar->winx - 1.0f; + r_ray_co[1] = 2.0f * mval[1] / ar->winy - 1.0f; + + if (rv3d->persp == RV3D_CAMOB) { + r_ray_co[1] = -1.0f; + } + else { + r_ray_co[1] = 0.0f; + } + + mul_project_m4_v3(rv3d->persinv, r_ray_co); + } - start_offset = v3d->near; - end_offset = v3d->far; + if ((rv3d->is_persp == false) && (rv3d->persp != RV3D_CAMOB)) { + end_offset = v3d->far / 2.0f; + start_offset = -end_offset; } else { - const float ortho_extent = 1000.0f; - float vec[4]; - vec[0] = 2.0f * mval[0] / ar->winx - 1; - vec[1] = 2.0f * mval[1] / ar->winy - 1; - vec[2] = 0.0f; - vec[3] = 1.0f; - - mul_m4_v4(rv3d->persinv, vec); - copy_v3_v3(r_ray_co, vec); - - start_offset = (rv3d->persp == RV3D_CAMOB) ? 0.0f : -ortho_extent; - end_offset = ortho_extent; + ED_view3d_clip_range_get(v3d, rv3d, &start_offset, &end_offset, false); } if (r_ray_start) { |