本文整理汇总了C++中Selectable::intersect方法的典型用法代码示例。如果您正苦于以下问题:C++ Selectable::intersect方法的具体用法?C++ Selectable::intersect怎么用?C++ Selectable::intersect使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Selectable
的用法示例。
在下文中一共展示了Selectable::intersect方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getCursor
Selection ViewpointCursor::getCursor(const SelectableList& selectables) {
Selectable* closestObject = NULL;
Selection closestIntersection;
if (updatePending) {
closestIntersection.distance = std::numeric_limits<float>::max();
glm::vec3 p = getUserPosition();
glm::vec3 d = getCursorDirection();
// First up, see if we intersect one of the objects.
for (SelectableList::const_iterator it = selectables.begin(); it < selectables.end(); ++it) {
Selectable* s = *it;
Selection i = s->intersect(p, d);
if (i.distance > 0 && i.distance < closestIntersection.distance)
{
closestObject = s;
closestIntersection = i;
}
}
updatePending = false;
// Return the closest object, if there was one.
if (closestObject != NULL) {
cursorPlaced = true;
cursor3D = closestIntersection.pos;
cursorNormal = closestIntersection.normal;
closestIntersection.rotationMatrix = getCursorRotation();
closestIntersection.object = closestObject;
}
// intersect with magic plane so at least the cursor appears...
else {
glm::vec3 userDirection = getViewDirection();
Plane plane(p + userDirection*planeDistance, userDirection);
Plane::Intersection ip = plane.intersect(p, d);
if (ip.intersects) {
cursorPlaced = true;
cursor3D = ip.intersectionPoint;
cursorNormal = userDirection*-1.0f;
cursorPlaced = true;
closestIntersection.pos = cursor3D;
closestIntersection.normal = cursorNormal;
closestIntersection.rotationMatrix = getCursorRotation();
closestIntersection.object = NULL;
}
}
}
return closestIntersection;
}