예제 #1
0
        public virtual void RenderShadowMap(RenderScene scene, CameraInfo lightCamera, int framebufferTarget)
        {
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebufferTarget);
            GL.Clear(ClearBufferMask.DepthBufferBit);

            RenderScene(scene, lightCamera, shadowMapMaterial);
        }
        public override void RenderShadowMaps(Renderer renderer, RenderScene scene)
        {
            CameraInfo info = renderer.CameraInfo;

            Vector3 position = info.Position;

            position -= lightDistance * lightDirection;
            lightDirection.Normalize();

            // Orthographic camera
            info.CopyTo(renderCameraInfo);
            renderCameraInfo.Position     = position;
            renderCameraInfo.Target       = position + lightDirection;
            renderCameraInfo.NearPlane    = nearDistance;
            renderCameraInfo.FarPlane     = farDistance;
            renderCameraInfo.RenderWidth  = preferredShadowMapResolution.Width;
            renderCameraInfo.RenderHeight = preferredShadowMapResolution.Height;
            renderCameraInfo.Type         = CameraType.Orthographic;

            Matrix4 proj;
            Matrix4 view;

            renderCameraInfo.GetProjection(out proj);
            renderCameraInfo.GetView(out view);

            shadowMap[0].LightViewProjection = view * proj;

            renderer.RenderShadowMap(scene, renderCameraInfo, shadowMap[0].FrameBuffer);
        }
예제 #3
0
 protected virtual void RenderShadowMaps(RenderScene scene)
 {
     foreach (Light light in scene.Lights)
     {
         light.RenderShadowMaps(this, scene);
     }
 }
예제 #4
0
        public virtual void Render(RenderScene scene)
        {
            // Render all shadow maps
            // RenderShadowMaps(scene);

            // GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
            GL.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit);

            //Blit(scene.Lights[0].GetShadowMaps()[0].DepthTexture);
            RenderScene(scene, cameraInfo);
        }
예제 #5
0
        public virtual void RenderScene(RenderScene scene, CameraInfo info, Material overrideMaterial)
        {
            info.GetView(out view);
            info.GetProjection(out projection);

            Matrix4.Mult(ref view, ref projection, out viewProjection);

            Material material = overrideMaterial;

            if (overrideMaterial != null)
            {
                overrideMaterial.Apply(this);
                overrideMaterial.SetViewProjectionTransform(ref viewProjection);
            }

            foreach (var renderNodeList in scene.RenderNodes.Values)
            {
                var model = renderNodeList[0].Model;

                for (int meshIndex = 0; meshIndex < model.MeshCount; ++meshIndex)
                {
                    var mesh = model.MeshGroup.Meshes[meshIndex];

                    if (overrideMaterial == null)
                    {
                        material = model.Material;

                        material.Apply(this);
                        material.SetViewProjectionTransform(ref viewProjection);
                    }

                    mesh.EnableAttributeArrays();

                    foreach (var meshInstance in renderNodeList)
                    {
                        if (meshInstance.Visible)
                        {
                            material.SetWorldTransform(ref meshInstance.Transform);
                            mesh.Draw();
                        }
                    }

                    mesh.DisableAttributeArrays();
                }
            }
        }
예제 #6
0
 public void RenderScene(RenderScene scene, CameraInfo info)
 {
     RenderScene(scene, info, null);
 }
예제 #7
0
 public virtual void RenderShadowMaps(Renderer renderer, RenderScene scene)
 {
 }