Hi all,

I got a bit stuck with coordinate transformations and projection method - maybe someone can quickly help me:

With a given view (-vta -vh 180 -vv 180 -vd dx dy dz -vu ux uy uz ), how can I easily (and fast=analytically) determine the pixel coordinates for a direction ax ay az (resolution of the image also given) ? This direction vector is not necessarily a direction used for the pixels (so grepping vwrays output is not an option, would be anyhow too slow). In other words, if I send out a ray with a certain direction, how can I get the pixel coordinates x,y for this direction?

thanks

Jan

Hi Jan,

The viewloc() routine in ray/src/common/image.c handles this calculation. Normally, you give it a world position (x,y,z) as an FVECT and it computes the image position using a particular view in normalized coordinates plus depth. If you don’t care about depth, just take your direction vector and add it to the view origin (-vp) to compute the world position you give to the routine. If the direction/position is within the view, viewloc() will return VL_GOOD.

Hi Greg,

Thank you for that quick answer - I think that solved it !

I looked in that routine and I understand it as follows:

v_d: viewing direction of image

v_ray: ray direction

h_vec= v_d x v_u

v_vec= h_vec x v_d

d: is the angle (in degree) between v_ray and v_d

then (for a 180°x180° image, no offsets):

x= 0.5 + cos (between v_ray and h_vec) * d/180

y= 0.5 + cos (between v_ray and v_vec) *d/180

x,y is the relative image size

Correct?

Thanks!

Jan

Checking my code, it looks like d in your formula should be the angle between v_ray and v_d divided by the sine of that same angle. (See the sqrt() in the denominator on line 296 of image.c.)