6 using SiliconStudio.Core.Extensions;
7 using SiliconStudio.Core.Mathematics;
8 using SiliconStudio.Paradox.Effects.Modules;
10 namespace SiliconStudio.
Paradox.Effects
26 modelRenderer.AcceptPrepareMeshForRendering.Add((model, mesh) => IsTransparent(mesh));
27 modelRenderer.AcceptRenderMesh.Add((context, effectMesh) => IsTransparent(effectMesh.Mesh));
28 modelRenderer.AppendDebugName(
"Transparent");
39 modelRenderer.AcceptPrepareMeshForRendering.Add((model, mesh) => !IsTransparent(mesh));
40 modelRenderer.AcceptRenderMesh.Add((context, effectMesh) => !IsTransparent(effectMesh.Mesh));
41 modelRenderer.AppendDebugName(
"Opaque");
45 private static bool IsTransparent(
Mesh mesh)
47 return mesh.Material.Parameters.Get(MaterialParameters.UseTransparent);
59 modelRenderer.AppendDebugName(
"Layer " + activelayers);
70 modelRenderer.AcceptRenderMesh.Add((context, effectMesh) => (context.Parameters.Get(
RenderingParameters.
ActiveRenderLayer) & effectMesh.Mesh.Parameters.Get(RenderingParameters.RenderLayer)) != RenderLayers.RenderLayerNone);
71 modelRenderer.AppendDebugName(
"Active Layer");
82 modelRenderer.AcceptPrepareMeshForRendering.Add((model, mesh) => mesh.Parameters.Get(
LightingKeys.
CastShadows));
83 modelRenderer.AcceptRenderMesh.Add((context, effectMesh) => effectMesh.Mesh.Parameters.Get(
LightingKeys.
CastShadows));
84 modelRenderer.AppendDebugName(
"ShadowMapCaster");
95 return modelRenderer.UpdateMeshes.Add(
98 Matrix viewProjection, mat1, mat2;
101 modelRenderer.Pass.Parameters.Get(TransformationKeys.View, out mat1);
102 modelRenderer.Pass.Parameters.Get(TransformationKeys.Projection, out mat2);
103 Matrix.Multiply(ref mat1, ref mat2, out viewProjection);
107 for (var i = 0; i < meshes.Count; ++i)
109 var renderMesh = meshes[i];
113 renderMesh.Mesh.Parameters.Get(TransformationKeys.World, out mat1);
116 var boundingBox = renderMesh.Mesh.BoundingBox;
117 var center = boundingBox.Center;
118 var extent = boundingBox.Extent;
120 Vector3.TransformCoordinate(ref center, ref mat1, out center);
125 float* matrixData = &mat1.M11;
126 for (
int j = 0; j < 16; ++j)
128 *matrixData = Math.Abs(*matrixData);
133 Vector3.TransformNormal(ref extent, ref mat1, out extent);
138 meshes.SwapRemoveAt(i--);
static readonly ParameterKey< RenderLayers > RenderLayer
Extensions filter for ModelRenderer
static ModelRenderer AddDefaultFrustrumCulling(this ModelRenderer modelRenderer)
Adds a default frustrum culling for rendering only meshes that are only inside the frustrum/ ...
static bool FrustumContainsBox(ref BoundingFrustum frustum, ref Vector3 center, ref Vector3 extent)
Determines whether a BoundingFrustum intersects or contains an AABB determined by its center and exte...
Contains static methods to help in determining intersections, containment, etc.
static ModelRenderer AddOpaqueFilter(this ModelRenderer modelRenderer)
Adds an opaque filter for rendering meshes which are opaque.
static ModelRenderer AddContextActiveLayerFilter(this ModelRenderer modelRenderer)
Adds a layer filter for rendering meshes only on the context active layers.
static ModelRenderer AddTransparentFilter(this ModelRenderer modelRenderer)
Adds a transparent filter for rendering meshes which are transparent.
static readonly ParameterKey< bool > CastShadows
Flag stating if the mesh casts shadows.
This Renderer is responsible to prepare and render meshes for a specific pass.
static ModelRenderer AddLayerFilter(this ModelRenderer modelRenderer, RenderLayers activelayers)
Adds a layer filter for rendering meshes only on the specified layer.
static ModelRenderer AddShadowCasterFilter(this ModelRenderer modelRenderer)
Adds a shadow caster filter for rendering only meshes that can cast shadows.
static readonly ParameterKey< RenderLayers > ActiveRenderLayer
Represents a 4x4 mathematical matrix.