Пример #1
0
        public void Render(CommandList cl)
        {
            if (areQuadsDirty)
            {
                float hw = data.width * curScale * 0.5f;
                float fX = data.width * curScale * 0.35350001f; // original magic values
                float fY = data.width * curScale * 0.353553f;

                var vertices = quadMeshBuffer[quadRange];
                SetPlane(vertices, 0, 0f, hw);
                if (data.complexity != BeamStarComplexity.OnePlane)
                {
                    SetPlane(vertices, 1, hw, 0f);
                }
                if (data.complexity == BeamStarComplexity.FourPlanes)
                {
                    SetPlane(vertices, 2, fX, fY);
                    SetPlane(vertices, 3, -fX, fY);
                }

                var rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, curRotation * MathF.PI / 180f);
                for (int i = 0; i < vertices.Length; i++)
                {
                    vertices[i].pos = Vector3.Transform(vertices[i].pos, rotation);
                }
            }

            (material as IMaterial).Apply(cl);
            quadMeshBuffer.Render(cl, quadRange);
        }
Пример #2
0
        public void Render(CommandList cl)
        {
            if (areQuadsDirty)
            {
                areQuadsDirty = false;
                var count = 0;
                foreach (var plane in planes.Where(p => p.life > 0f))
                {
                    UpdateQuad(in plane, quadRange.Start.Offset(count++));
                }
                aliveRange = quadRange.Start..quadRange.Start.Offset(count);
            }

            (material as IMaterial).Apply(cl);
            quadMeshBuffer.Render(cl, aliveRange);
        }
Пример #3
0
 public void Render(CommandList cl)
 {
     (material as IMaterial).Apply(cl);
     quadMeshBuffer.Render(cl, quadRange);
 }