[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