本文整理汇总了C++中Transformd::vector_to_local方法的典型用法代码示例。如果您正苦于以下问题:C++ Transformd::vector_to_local方法的具体用法?C++ Transformd::vector_to_local怎么用?C++ Transformd::vector_to_local使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Transformd
的用法示例。
在下文中一共展示了Transformd::vector_to_local方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get_autofocus_focal_distance
double get_autofocus_focal_distance(const Intersector& intersector) const
{
// The autofocus considers the scene at the middle of the shutter interval.
const float time = get_shutter_middle_time();
const Transformd transform = m_transform_sequence.evaluate(time);
// Create a ray that goes through the center of the lens.
ShadingRay ray;
ray.m_org = transform.get_local_to_parent().extract_translation();
ray.m_dir = normalize(transform.vector_to_parent(-ndc_to_camera(m_autofocus_target)));
ray.m_tmin = 0.0;
ray.m_tmax = numeric_limits<double>::max();
ray.m_time =
ShadingRay::Time::create_with_normalized_time(
0.5f,
get_shutter_open_time(),
get_shutter_close_time());
ray.m_flags = VisibilityFlags::ProbeRay;
ray.m_depth = 0;
// Trace the ray.
ShadingPoint shading_point;
intersector.trace(ray, shading_point);
if (shading_point.hit())
{
// Hit: compute the focal distance.
const Vector3d v = shading_point.get_point() - ray.m_org;
const double af_focal_distance = -transform.vector_to_local(v).z;
RENDERER_LOG_INFO(
"camera \"%s\": autofocus sets focal distance to %f (using camera position at time=%.1f).",
get_path().c_str(),
af_focal_distance,
ray.m_time.m_absolute);
return af_focal_distance;
}
else
{
// Miss: focus at infinity.
RENDERER_LOG_INFO(
"camera \"%s\": autofocus sets focal distance to infinity (using camera position at time=%.1f).",
get_path().c_str(),
ray.m_time.m_absolute);
return 1.0e38;
}
}
示例2: get_autofocus_focal_distance
double get_autofocus_focal_distance(const Intersector& intersector) const
{
// The autofocus considers the scene at the middle of the shutter interval.
const double time = get_shutter_middle_time();
const Transformd transform = m_transform_sequence.evaluate(time);
// Compute the camera space coordinates of the focus point.
const Vector3d film_point = ndc_to_camera(m_autofocus_target);
// Create a ray in world space.
ShadingRay ray;
ray.m_org = transform.point_to_parent(Vector3d(0.0));
ray.m_dir = transform.point_to_parent(film_point) - ray.m_org;
ray.m_tmin = 0.0;
ray.m_tmax = numeric_limits<double>::max();
ray.m_time = time;
ray.m_type = ShadingRay::ProbeRay;
ray.m_depth = 0;
// Trace the ray.
ShadingPoint shading_point;
intersector.trace(ray, shading_point);
if (shading_point.hit())
{
// Hit: compute the focal distance.
const Vector3d v = shading_point.get_point() - ray.m_org;
const double af_focal_distance = -transform.vector_to_local(v).z;
RENDERER_LOG_INFO(
"camera \"%s\": autofocus sets focal distance to %f (using camera position at time=%.1f).",
get_name(),
af_focal_distance,
ray.m_time);
return af_focal_distance;
}
else
{
// Miss: focus at infinity.
RENDERER_LOG_INFO(
"camera \"%s\": autofocus sets focal distance to infinity (using camera position at time=%.1f).",
get_name(),
ray.m_time);
return 1.0e38;
}
}