示例#1
0
        /// <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();
        }
示例#2
0
        /// <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);
        }