3D View: add a simple un-clipped win_to_ray
This commit is contained in:
@@ -186,7 +186,6 @@ static bool stroke_elem_project(
|
||||
float surface_offset, const float radius,
|
||||
float r_location_world[3], float r_normal_world[3])
|
||||
{
|
||||
View3D *v3d = cdd->vc.v3d;
|
||||
ARegion *ar = cdd->vc.ar;
|
||||
RegionView3D *rv3d = cdd->vc.rv3d;
|
||||
|
||||
@@ -196,7 +195,7 @@ static bool stroke_elem_project(
|
||||
if (cdd->project.use_plane) {
|
||||
/* get the view vector to 'location' */
|
||||
float ray_origin[3], ray_direction[3];
|
||||
ED_view3d_win_to_ray_clipped(cdd->vc.ar, v3d, mval_fl, ray_origin, ray_direction, false);
|
||||
ED_view3d_win_to_ray(ar, mval_fl, ray_origin, ray_direction);
|
||||
|
||||
float lambda;
|
||||
if (isect_ray_plane_v3(ray_origin, ray_direction, cdd->project.plane, &lambda, true)) {
|
||||
|
||||
@@ -227,6 +227,9 @@ bool ED_view3d_win_to_ray_clipped(
|
||||
bool ED_view3d_win_to_ray_clipped_ex(
|
||||
const struct ARegion *ar, const struct View3D *v3d, const float mval[2],
|
||||
float r_ray_co[3], float r_ray_normal[3], float r_ray_start[3], bool do_clip);
|
||||
void ED_view3d_win_to_ray(
|
||||
const struct ARegion *ar, const float mval[2],
|
||||
float r_ray_start[3], float r_ray_normal[3]);
|
||||
void ED_view3d_global_to_vector(const struct RegionView3D *rv3d, const float coord[3], float vec[3]);
|
||||
void ED_view3d_win_to_3d(
|
||||
const struct View3D *v3d, const struct ARegion *ar,
|
||||
|
||||
@@ -406,6 +406,24 @@ bool ED_view3d_win_to_ray_clipped(
|
||||
return ED_view3d_win_to_ray_clipped_ex(ar, v3d, mval, NULL, r_ray_normal, r_ray_start, do_clip_planes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate a 3d viewpoint and direction vector from 2d window coordinates.
|
||||
* This ray_start is located at the viewpoint, ray_normal is the direction towards mval.
|
||||
* \param ar The region (used for the window width and height).
|
||||
* \param mval The area relative 2d location (such as event->mval, converted into float[2]).
|
||||
* \param r_ray_start The world-space point where the ray intersects the window plane.
|
||||
* \param r_ray_normal The normalized world-space direction of towards mval.
|
||||
*
|
||||
* \note Ignores view near/far clipping, to take this into account use #ED_view3d_win_to_ray_clipped.
|
||||
*/
|
||||
void ED_view3d_win_to_ray(
|
||||
const ARegion *ar, const float mval[2],
|
||||
float r_ray_start[3], float r_ray_normal[3])
|
||||
{
|
||||
ED_view3d_win_to_origin(ar, mval, r_ray_start);
|
||||
ED_view3d_win_to_vector(ar, mval, r_ray_normal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate a normalized 3d direction vector from the viewpoint towards a global location.
|
||||
* In orthographic view the resulting vector will match the view vector.
|
||||
|
||||
Reference in New Issue
Block a user