//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(); } }
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); } }
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]); } }
internal override Component Clone() { var res = new MeshDrawer(Mesh, Materials, Morphes); res.OutlineDrawing = OutlineDrawing; return(res); }
public Model(MeshDrawer mesh, Bone[] bones, Morph[] morphes) { morph = morphes; meshes = mesh; anim = new AnimController(bones, mesh.mesh); }