/// <summary> /// FOR THE LOVE OF SAKURAI DON'T USE THIS /// </summary> public override void RenderLegacy() { if (Model != null) { foreach (var mesh in Model.Meshes) { GL.PushMatrix(); Matrix4 transform = Matrix4.Identity; if (Skeleton != null && mesh.ParentBone != "" && Skeleton.ContainsBone(mesh.ParentBone)) { transform = Skeleton[mesh.ParentBone].WorldTransform; } GL.MultMatrix(ref transform); GL.Begin(PrimitiveType.Triangles); foreach (var index in mesh.Indices) { var vertex = mesh.Vertices[(int)index]; GL.Color3(vertex.Normal0); GL.Vertex3(vertex.Position0); } GL.End(); GL.PopMatrix(); } } // the base SBScene can render the skeleton base.RenderLegacy(); }
/// <summary> /// Renders the model using a shader /// </summary> /// <param name="ModelViewProjection"></param> private void RenderModelShader(Camera camera) { if (Model == null) { return; } var shader = GetShader(); if (!shader.LinkStatusIsOk) { return; } shader.UseProgram(); // Bones int blockIndex = GL.GetUniformBlockIndex(shader.Id, "Bones"); boneUniformBuffer.BindBase(BufferRangeTarget.UniformBuffer, blockIndex); if (Skeleton != null) { boneBinds = Skeleton.GetBindTransforms(); } boneUniformBuffer.SetData(boneBinds, BufferUsageHint.DynamicDraw); SetShaderUniforms(shader); SetShaderCamera(shader, camera); foreach (var mesh in Model.Meshes) { if (!mesh.Visible) { continue; } shader.SetBoolToInt("renderWireframe", mesh.Selected || ApplicationSettings.EnableWireframe); // refresh rendering if this not is not setup if (!sbMeshToRenderMesh.ContainsKey(mesh)) { RefreshRendering(); } // bind material if (mesh.Material != null) { mesh.Material.Bind(this, shader); } // single bind transforms Matrix4 transform = Matrix4.Identity; if (Skeleton != null && mesh.ParentBone != "" && Skeleton.ContainsBone(mesh.ParentBone)) { transform = Skeleton[mesh.ParentBone].AnimatedWorldTransform; } shader.SetMatrix4x4("transform", ref transform); // draw mesh var rmesh = sbMeshToRenderMesh[mesh]; rmesh.Draw(shader, null); } //StudioSB.Rendering.Shapes.Sphere.DrawRectangularPrism(((SBUltimateModel)Model).VolumeCenter, size.X, size.Y, size.Z, true); //StudioSB.Rendering.Shapes.Sphere.DrawSphereLegacy(Model.BoundingSphere.Xyz, Model.BoundingSphere.W, 20, true); }