Esempio n. 1
0
        //shadow rendering
        public void RenderShadow(List <SceneNode> nodes)
        {
            SetLightVars();

            direction = Matrix4.LookAt(pos, look, new Vector3(0f, 1f, 0f));
            GL.Viewport(0, 0, width, heigth);
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, shadowBuffer);
            GL.Clear(ClearBufferMask.DepthBufferBit);
            shdr.ApplyShader();

            foreach (var node in nodes)
            {
                if (!node.Active)
                {
                    continue;
                }
                MeshDrawer md = (MeshDrawer)node.GetComponent(typeof(MeshDrawer));
                if (md == null)
                {
                    continue;
                }

                Matrix4 pvm = node.GetTransform.GlobalTransform * direction * projection;
                shdr.SetUniform(pvm, "pvm");
                md.DrawSimple();
            }
        }
Esempio n. 2
0
        public void Render(MeshDrawer msrd)
        {
            //var mesh = (MeshDrawer) node.GetComponent(typeof(MeshDrawer));
            SceneNode node = msrd.Node;

            Matrix4 pvm  = node.GetTransform.GlobalTransform * Viev * Projection;
            Matrix4 norm = node.GetTransform.GlobalTransform.Inverted();

            norm.Transpose();
            ubs.SetNormalSpace(norm);
            ubs.SetPVMSpace(pvm);
            ubs.SetModelSpace(node.GetTransform.GlobalTransform);
            ubs.SetVievModelSpace(node.GetTransform.GlobalTransform * Viev);
            msrd.Draw();

            if (msrd.OutlineDrawing)
            {
                CoreEngine.gEngine.SetCullMode(FaceCullMode.Front);
                outline.ApplyShader();
                outline.SetUniform(pvm, "pvm");
                outline.SetUniform(0.03f, "outline_scale");
                msrd.DrawOutline();
                CoreEngine.gEngine.SetCullMode(FaceCullMode.Disable);
            }
        }
Esempio n. 3
0
        internal void RenderScene(MeshDrawer[] meshes, Camera camera)
        {
            //frustrum culling and filltering
            MeshDrawer[] meshesSorted = new MeshDrawer[meshes.Length];
            int          count        = 0;

            for (int i = 0; i < meshes.Length; i++)
            {
                if (meshes[i].Node.Active && (meshes[i].RenderMask & camera.RenderMask) > 0)
                {
                    if (meshes[i].GetBoundingBox.CheckFrustrumPresence(meshes[i].Node.GetTransform.GlobalTransform * camera.GetLook * camera.Projection))
                    {
                        meshesSorted[count++] = meshes[i];
                    }
                }
            }

            renderer.Viev       = camera.GetLook;
            renderer.Projection = camera.Projection;
            ubl.SetViewPos(camera.GetPos);
            ubs.SetPvSpace(camera.GetLook * camera.Projection);
            for (int n = 0; n < count; n++)
            {
                renderer.Render(meshesSorted[n]);
            }
        }
Esempio n. 4
0
        internal override Component Clone()
        {
            var res = new MeshDrawer(Mesh, Materials, Morphes);

            res.OutlineDrawing = OutlineDrawing;
            return(res);
        }
Esempio n. 5
0
 public Model(MeshDrawer mesh, Bone[] bones, Morph[] morphes)
 {
     morph  = morphes;
     meshes = mesh;
     anim   = new AnimController(bones, mesh.mesh);
 }