}
#endif // if 0, unused NDof code
-/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist
- * basically the same as...
- * rv3d->persp= RV3D_PERSP
- * setviewmatrixview3d(scene, v3d, rv3d);
- * setcameratoview3d(v3d, rv3d, v3d->camera);
- * ...but less of a hassle
- * */
-void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4])
-{
- float qt[4], dvec[3];
- copy_qt_qt(qt, rv3d->viewquat);
- qt[0]= -qt[0];
- quat_to_mat4(mat, qt);
- mat[3][2] -= rv3d->dist;
- translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]);
- mul_v3_v3fl(dvec, mat[2], -rv3d->dist);
- sub_v3_v3v3(mat[3], dvec, rv3d->ofs);
-}
-
/* Gets the view trasnformation from a camera
* currently dosnt take camzoom into account
}
}
+void ED_view3d_to_m4(float mat[][4], const float ofs[3], const float quat[4], const float dist)
+{
+ float iviewquat[4]= {-quat[0], quat[1], quat[2], quat[3]};
+ float dvec[3]= {0.0f, 0.0f, dist};
+
+ quat_to_mat4(mat, iviewquat);
+ mul_mat3_m4_v3(mat, dvec);
+ sub_v3_v3v3(mat[3], dvec, ofs);
+}
+
/* object -> view */
void ED_view3d_from_object(Object *ob, float ofs[3], float quat[4], float *dist, float *lens)
/* view -> object */
void ED_view3d_to_object(Object *ob, const float ofs[3], const float quat[4], const float dist)
{
- float mat4[4][4];
- float dvec[3]= {0.0f, 0.0f, dist};
- float iviewquat[4]= {-quat[0], quat[1], quat[2], quat[3]};
-
- quat_to_mat4(mat4, iviewquat);
- mul_mat3_m4_v3(mat4, dvec);
- sub_v3_v3v3(mat4[3], dvec, ofs);
- object_apply_mat4(ob, mat4, TRUE, TRUE);
+ float mat[4][4];
+ ED_view3d_to_m4(mat, ofs, quat, dist);
+ object_apply_mat4(ob, mat, TRUE, TRUE);
}