public IsOpaque ( |
||
boundary | ||
return | bool |
/// <summary> /// Traverse from the bottom right of the scene graph (top visible node) /// up the tree determining which parent nodes are occluded by their children /// nodes. /// </summary> /// <param name="n">The node to find occlusions for.</param> /// <param name="pickPath"> /// A pick path representing the bounds of <c>n</c> in parent coordinates. /// </param> /// <remarks> /// Note that this is only detecting a subset of occlusions (parent, child), /// others such as overlapping siblings or cousins are not detected. /// </remarks> public void DetectOcclusions(PNode n, PPickPath pickPath) { if (n.FullIntersects(pickPath.PickBounds)) { pickPath.PushMatrix(n.MatrixReference); int count = n.ChildrenCount; for (int i = count - 1; i >= 0; i--) { PNode each = n[i]; if (n.Occluded) { // if n has been occluded by a previous decendent then // this child must also be occluded each.Occluded = true; } else { // see if child each occludes n DetectOcclusions(each, pickPath); } } // see if n occludes it's parents if (!n.Occluded) { if (n.Intersects(pickPath.PickBounds)) { if (n.IsOpaque(pickPath.PickBounds)) { PNode p = n.Parent; while (p != null && !p.Occluded) { p.Occluded = true; } } } } pickPath.PopMatrix(n.MatrixReference); } }