MCPcopy Create free account
hub / github.com/RenderKit/embree / pointQuery

Method pointQuery

kernels/geometry/instance_array_intersector.cpp:74–108  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72 }
73
74 bool InstanceArrayIntersector1::pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim)
75 {
76 const InstanceArray* instance = context->scene->get<InstanceArray>(prim.instID_);
77 Accel* object = instance->getObject(prim.primID_);
78 if (!object) return false;
79
80 const AffineSpace3fa local2world = instance->getLocal2World(prim.primID_);
81 const AffineSpace3fa world2local = instance->getWorld2Local(prim.primID_);
82 float similarityScale = 0.f;
83 const bool similtude = context->query_type == POINT_QUERY_TYPE_SPHERE
84 && similarityTransform(world2local, &similarityScale);
85 assert((similtude && similarityScale > 0) || !similtude);
86
87 if (likely(instance_id_stack::push(context->userContext, prim.instID_, prim.primID_, world2local, local2world)))
88 {
89 PointQuery query_inst;
90 query_inst.time = query->time;
91 query_inst.p = xfmPoint(world2local, query->p);
92 query_inst.radius = query->radius * similarityScale;
93
94 PointQueryContext context_inst(
95 (Scene*)object,
96 context->query_ws,
97 similtude ? POINT_QUERY_TYPE_SPHERE : POINT_QUERY_TYPE_AABB,
98 context->func,
99 context->userContext,
100 similarityScale,
101 context->userPtr);
102
103 bool changed = object->intersectors.pointQuery(&query_inst, &context_inst);
104 instance_id_stack::pop(context->userContext);
105 return changed;
106 }
107 return false;
108 }
109
110 void InstanceArrayIntersector1MB::intersect(const Precalculations& pre, RayHit& ray, RayQueryContext* context, const Primitive& prim)
111 {

Callers

nothing calls this directly

Calls 7

similarityTransformFunction · 0.85
pushFunction · 0.85
popFunction · 0.85
getObjectMethod · 0.80
xfmPointFunction · 0.50
getLocal2WorldMethod · 0.45
getWorld2LocalMethod · 0.45

Tested by

no test coverage detected