public void Render(KBuild build, KAnimBank bank, int frameNumber)
        {
            Matrix4 modelMat     = Matrix4.Identity;
            Matrix4 pivotMat     = Matrix4.Identity;
            Matrix4 transformMat = Matrix4.Identity;


            geoShader.Activate();
            // Draw Origin
            geoShader.SetUniform("Model", ref modelMat);
            origin.Draw();

            if (frameNumber < 0 || frameNumber >= bank.FrameCount)
            {
                frameNumber = 0;
            }

            KAnimFrame frame = bank.Frames[frameNumber];

            Matrix4 frameMat = Matrix4.CreateTranslation(frame.X, frame.Y, 0);

            spriteShader.Activate();
            texture.Bind();

            for (int i = frame.ElementCount - 1; i >= 0; i--)
            {
                KAnimElement element = frame.Elements[i];
                string       symbol  = build.GetSymbolName(element.SymbolHash);
                if (symbol == null)
                {
                    continue;
                }
                KFrame sprite = build.GetFrame(symbol, element.FrameNumber);
                if (sprite == null)
                {
                    continue;
                }

                pivotMat = Matrix4.CreateTranslation(sprite.PivotX, sprite.PivotY, 0);

                transformMat = new Matrix4(
                    element.M00, -element.M10, 0, 0,
                    element.M01, -element.M11, 0, 0,
                    0, 0, -1, 0,
                    element.M02, -element.M12, 0, 1
                    );

                modelMat = halfScaleMat * pivotMat * transformMat;

                spriteShader.SetUniform("Model", ref modelMat);

                MakeQuadVBO(sprite.PivotWidth, sprite.PivotHeight, element.Red, element.Green, element.Blue, element.Alpha, sprite.GetUVRectangle(), out Vertex[] vertices, out int[] elements);
                quad.SetData(OpenTK.Graphics.OpenGL.PrimitiveType.Triangles, vertices, elements);

                quad.Draw();
            }
        }
Beispiel #2
0
        public Sprite(KFrame frame, Bitmap img)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }
            if (img == null)
            {
                throw new ArgumentNullException("img");
            }

            FrameData = frame;
            Image     = img;
        }