[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25597] trunk/blender/source/blender/ editors: Utility function to get the view vector aligned with a specific 3d coordinate .
Martin Poirier
theeth at yahoo.com
Mon Dec 28 23:40:52 CET 2009
Revision: 25597
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25597
Author: theeth
Date: 2009-12-28 23:40:52 +0100 (Mon, 28 Dec 2009)
Log Message:
-----------
Utility function to get the view vector aligned with a specific 3d coordinate.
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 2009-12-28 22:16:13 UTC (rev 25596)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h 2009-12-28 22:40:52 UTC (rev 25597)
@@ -93,6 +93,8 @@
void project_float(struct ARegion *ar, float *vec, float *adr);
void project_float_noclip(struct ARegion *ar, float *vec, float *adr);
+void viewvector(struct RegionView3D *rv3d, float coord[3], float vec[3]);
+
void viewline(struct ARegion *ar, struct View3D *v3d, float mval[2], float ray_start[3], float ray_end[3]);
void viewray(struct ARegion *ar, struct View3D *v3d, float mval[2], float ray_start[3], float ray_normal[3]);
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2009-12-28 22:16:13 UTC (rev 25596)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2009-12-28 22:40:52 UTC (rev 25597)
@@ -576,7 +576,32 @@
normalize_v3(ray_normal);
}
+void viewvector(RegionView3D *rv3d, float coord[3], float vec[3])
+{
+ if (rv3d->persp != RV3D_ORTHO)
+ {
+ float p1[4], p2[4];
+ VECCOPY(p1, coord);
+ p1[3] = 1.0f;
+ VECCOPY(p2, p1);
+ p2[3] = 1.0f;
+ mul_m4_v4(rv3d->viewmat, p2);
+
+ p2[0] = 2.0f * p2[0];
+ p2[1] = 2.0f * p2[1];
+ p2[2] = 2.0f * p2[2];
+
+ mul_m4_v4(rv3d->viewinv, p2);
+
+ sub_v3_v3v3(vec, p1, p2);
+ }
+ else {
+ VECCOPY(vec, rv3d->viewinv[2]);
+ }
+ normalize_v3(vec);
+}
+
void initgrabz(RegionView3D *rv3d, float x, float y, float z)
{
if(rv3d==NULL) return;
More information about the Bf-blender-cvs
mailing list