Fisheye Equidistant Lens algorith bugfix
r = lens * theta Thanks for Adriano Oliveira for reporting this and chasing down the right formula. Now fulldome works no longer need to use equisolid + a specific lens+sensor size. And happy birthday to me. And yes, that's how I celebrate it ;)
This commit is contained in:
@@ -57,8 +57,7 @@ aperture_types = (
|
|||||||
|
|
||||||
panorama_types = (
|
panorama_types = (
|
||||||
('EQUIRECTANGULAR', "Equirectangular", "Render the scene with a spherical camera, also known as Lat Long panorama"),
|
('EQUIRECTANGULAR', "Equirectangular", "Render the scene with a spherical camera, also known as Lat Long panorama"),
|
||||||
('FISHEYE_EQUIDISTANT', "Fisheye Equidistant", "Ignore the sensor dimensions"),
|
('FISHEYE_EQUIDISTANT', "Fisheye Equidistant", "Ideal for fulldomes, ignore the sensor dimensions"),
|
||||||
('FISHEYE_EQUISOLID', "Fisheye Equisolid",
|
('FISHEYE_EQUISOLID', "Fisheye Equisolid",
|
||||||
"Similar to most fisheye modern lens, takes sensor dimensions into consideration "
|
"Similar to most fisheye modern lens, takes sensor dimensions into consideration"),
|
||||||
"(for fulldomes use it with a square sensor ratio)"),
|
|
||||||
)
|
)
|
||||||
|
@@ -98,7 +98,7 @@ __device float3 fisheye_to_direction(float u, float v, float fov)
|
|||||||
return make_float3(0.0f, 0.0f, 0.0f);
|
return make_float3(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
float phi = acosf((r != 0.0f)? u/r: 0.0f);
|
float phi = acosf((r != 0.0f)? u/r: 0.0f);
|
||||||
float theta = asinf(r) * (fov / M_PI_F);
|
float theta = r * fov * 0.5f;
|
||||||
|
|
||||||
if(v < 0.0f) phi = -phi;
|
if(v < 0.0f) phi = -phi;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user