private void RenderForPicking(SceneNodeBase sceneElement, PickingEventArgs arg) { if (sceneElement != null) { var pickable = sceneElement as IPickable; TwoFlags flags = (pickable != null) ? pickable.EnablePicking : TwoFlags.None; bool before = ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren); bool children = (pickable == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); if (before) { pickable.PickingBaseId += arg.RenderedVertexCount; pickable.RenderForPicking(arg); arg.RenderedVertexCount += pickable.GetVertexCount(); } if (children) { foreach (var item in sceneElement.Children) { this.RenderForPicking(item, arg); } } } }
private void RenderUnderLight(SceneNodeBase sceneNodeBase, ShadowMappingUnderLightEventArgs arg) { if (sceneNodeBase != null) { var node = sceneNodeBase as ISupportShadowMapping; TwoFlags flags = (node != null) ? node.EnableShadowMapping : TwoFlags.None; bool before = (node != null) && ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren); bool children = (node == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); if (before) { flags = node.EnableRenderUnderLight; before = (flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren; } if (children) { flags = (node != null) ? node.EnableRenderUnderLight : TwoFlags.None; children = (node == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); } if (before) { node.RenderUnderLight(arg); } if (children) { foreach (var item in sceneNodeBase.Children) { RenderUnderLight(item, arg); } } } }
/// <summary> /// /// </summary> /// <param name="sceneNodeBase"></param> /// <param name="arg"></param> static void Extrude(SceneNodeBase sceneNodeBase, ShadowVolumeExtrudeEventArgs arg) { if (sceneNodeBase != null) { var node = sceneNodeBase as ISupportShadowVolume; TwoFlags flags = (node != null) ? node.EnableShadowVolume : TwoFlags.None; bool before = (node != null) && ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren); bool children = (node == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); if (before) { flags = node.EnableExtrude; before = (flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren; } if (children) { flags = (node != null) ? node.EnableExtrude : TwoFlags.None; children = (node == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); } if (before) { node.ExtrudeShadow(arg); } if (children) { foreach (var item in sceneNodeBase.Children) { Extrude(item, arg); } } } }
private void RenderForPicking(RendererBase sceneElement, PickEventArgs arg) { if (sceneElement != null) { mat4 parentCascadeModelMatrix = arg.ModelMatrixStack.Peek(); sceneElement.cascadeModelMatrix = sceneElement.GetModelMatrix(parentCascadeModelMatrix); var pickable = sceneElement as IPickable; TwoFlags flags = (pickable != null) ? pickable.EnablePicking : TwoFlags.None; bool before = (pickable != null) && ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren); bool children = (pickable == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); if (before) { pickable.PickingBaseId += arg.RenderedVertexCount; pickable.RenderForPicking(arg); arg.RenderedVertexCount += pickable.GetVertexCount(); } if (children) { arg.ModelMatrixStack.Push(sceneElement.cascadeModelMatrix); foreach (var item in sceneElement.Children) { this.RenderForPicking(item, arg); } arg.ModelMatrixStack.Pop(); } } }
private void RenderAmbientColor(SceneNodeBase sceneNodeBase, ShadowVolumeAmbientEventArgs arg) { if (sceneNodeBase != null) { var node = sceneNodeBase as ISupportShadowVolume; TwoFlags flags = (node != null) ? node.EnableShadowVolume : TwoFlags.None; bool before = (node != null) && ((flags & TwoFlags.BeforeChildren) == TwoFlags.BeforeChildren); bool children = (node == null) || ((flags & TwoFlags.Children) == TwoFlags.Children); if (before) { node.RenderAmbientColor(arg); } if (children) { foreach (var item in sceneNodeBase.Children) { RenderAmbientColor(item, arg); } } } }