예제 #1
0
        private void Render(Camera camera)
        {
            GL.ClearColor(_skyColor.X, _skyColor.Y, _skyColor.Z, 1f);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            worldMatrix &= camera.WorldToCamera.RemoveTranslation();
            _skyboxShader.DrawElements(PrimitiveType.Triangles, _vertices, _indices);
        }
예제 #2
0
 private void Render(Camera camera)
 {
     foreach (var mesh in camera.NodesInView <Mesh <MaterialVertex> > ())
     {
         transforms.UpdateModelViewAndNormalMatrices(camera.WorldToCamera * mesh.Transform);
         _materialShader.DrawElements(PrimitiveType.Triangles, mesh.VertexBuffer, mesh.IndexBuffer);
         //_materialShader.DrawNormals (mesh.NormalBuffer);
     }
 }
예제 #3
0
        private void Render(Camera camera, CascadedShadowUniforms shadowSource)
        {
            lighting.UpdateDirectionalLight(camera);
            shadows.viewLightMatrices &= !shadowSource.viewLightMatrices;
            //shadows.lightSpaceMatrix &= !shadowSource.lightSpaceMatrix;

            foreach (var mesh in camera.NodesInView <Mesh <EntityVertex> > ())
            {
                Sampler.Bind(!samplers, mesh.Textures);
                transforms.UpdateModelViewAndNormalMatrices(camera.WorldToCamera * mesh.Transform);
                _entityShader.DrawElements(PrimitiveType.Triangles, mesh.VertexBuffer, mesh.IndexBuffer);
                Sampler.Unbind(!samplers, mesh.Textures);
            }
        }
예제 #4
0
        private void Render(Vec2i viewportSize)
        {
            transform.perspectiveMatrix &= new Mat4(1f);
            var renderedPanels =
                from p in _scene.Root.Traverse().OfType <Panel <TexturedVertex> > ()
                where p.Renderer == PanelRenderer.Standard
                select p;

            foreach (var panel in renderedPanels)
            {
                (!texture.textureMap).Bind(panel.Texture);
                transform.modelViewMatrix &= panel.GetModelViewMatrix(viewportSize);
                _panelShader.DrawElements(PrimitiveType.Triangles, panel.VertexBuffer, panel.IndexBuffer);
                (!texture.textureMap).Unbind(panel.Texture);
            }
        }
예제 #5
0
        private void Render(Vec2i viewportSize)
        {
            Transform.perspectiveMatrix &= new Mat4(1f);
            var renderedPanels =
                from p in _scene.Root.Traverse().OfType <MaterialPanel <TexturedVertex> > ()
                where p.Texture != null
                select p;

            foreach (var panel in renderedPanels)
            {
                (!Texture.textureMap).Bind(panel.Texture);
                Transform.modelViewMatrix &= panel.GetModelViewMatrix(viewportSize);
                ColorOutput &= panel.Texture.PixelFormat == PixelFormat.Rgba ? 1 : 0;
                _panelShader.DrawElements(PrimitiveType.Triangles, panel.VertexBuffer, panel.IndexBuffer);
                (!Texture.textureMap).Unbind(panel.Texture);
            }
        }
예제 #6
0
        private void Render(Camera camera, CascadedShadowUniforms shadowSource)
        {
            var worldToCamera = camera.WorldToCamera;

            lighting.UpdateDirectionalLight(camera);
            shadows.viewLightMatrices &= !shadowSource.viewLightMatrices;
            //shadows.lightSpaceMatrix &= !shadowSource.lightSpaceMatrix;

            foreach (var mesh in camera.NodesInView <TerrainMesh <TerrainVertex> > ())
            {
                if (mesh.VertexBuffer != null && mesh.IndexBuffers != null)
                {
                    transforms.UpdateModelViewAndNormalMatrices(worldToCamera * mesh.Transform);
                    var distance = -(worldToCamera * mesh.BoundingBox).Front;
                    var lod      = distance < 100 ? 0 :
                                   distance < 200 ? 1 :
                                   2;
                    _terrainShader.DrawElements(PrimitiveType.TriangleStrip, mesh.VertexBuffer,
                                                mesh.IndexBuffers[lod]);
                }
            }
        }
예제 #7
0
        private void Render(Camera camera)
        {
            GL.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit);

            var light        = camera.Graph.Root.Traverse().OfType <DirectionalLight> ().First();
            var worlToCamera = camera.WorldToCamera;

            if (_cascaded)
            {
                csmUniforms.UpdateLightSpaceMatrices(camera, light);
            }
            else
            {
                shadowUniforms.UpdateLightSpaceMatrix(camera, light);
            }

            foreach (var mesh in camera.NodesInView <Mesh <EntityVertex> > ())
            {
                modelViewMatrix &= worlToCamera * mesh.Transform;
                _shadowShader.DrawElements(PrimitiveType.Triangles, mesh.VertexBuffer, mesh.IndexBuffer);
            }
        }