Revision: 36013 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36013 Author: campbellbarton Date: 2011-04-05 02:58:19 +0000 (Tue, 05 Apr 2011) Log Message: ----------- utility function for getting the vector direction the mouse is pointing in a perspective view.
Modified Paths: -------------- trunk/blender/source/blender/editors/include/ED_view3d.h trunk/blender/source/blender/editors/space_view3d/view3d_view.c Modified: trunk/blender/source/blender/editors/include/ED_view3d.h =================================================================== --- trunk/blender/source/blender/editors/include/ED_view3d.h 2011-04-04 22:42:43 UTC (rev 36012) +++ trunk/blender/source/blender/editors/include/ED_view3d.h 2011-04-05 02:58:19 UTC (rev 36013) @@ -82,6 +82,7 @@ int initgrabz(struct RegionView3D *rv3d, float x, float y, float z); void window_to_3d(struct ARegion *ar, float *vec, short mx, short my); void window_to_3d_delta(struct ARegion *ar, float *vec, short mx, short my); +void window_to_3d_vector(struct ARegion *ar, float *vec, short mx, short my); void view3d_unproject(struct bglMats *mats, float out[3], const short x, const short y, const float z); /* Depth buffer */ Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c =================================================================== --- trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2011-04-04 22:42:43 UTC (rev 36012) +++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2011-04-05 02:58:19 UTC (rev 36013) @@ -677,6 +677,28 @@ vec[2]= (rv3d->persinv[0][2]*dx + rv3d->persinv[1][2]*dy); } +/* doesn't rely on initgrabz */ +/* for perspective view, get the vector direction to + * the mouse cursor as a normalized vector */ +void window_to_3d_vector(ARegion *ar, float *vec, short mx, short my) +{ + RegionView3D *rv3d= ar->regiondata; + float dx, dy; + float viewvec[3]; + + dx= 2.0f*mx/ar->winx; + dy= 2.0f*my/ar->winy; + + /* normalize here so vecs are proportional to eachother */ + normalize_v3_v3(viewvec, rv3d->viewinv[2]); + + vec[0]= viewvec[0] - (rv3d->persinv[0][0]*dx + rv3d->persinv[1][0]*dy); + vec[1]= viewvec[1] - (rv3d->persinv[0][1]*dx + rv3d->persinv[1][1]*dy); + vec[2]= viewvec[2] - (rv3d->persinv[0][2]*dx + rv3d->persinv[1][2]*dy); + + normalize_v3(vec); +} + float read_cached_depth(ViewContext *vc, int x, int y) { ViewDepths *vd = vc->rv3d->depths; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs