Ejemplo n.º 1
0
                /// <summary>
                /// Queues a single triangle billboard for rendering
                /// </summary>
                public static void AddTriangle(ref TriMaterial mat, ref TriangleD triangle, MatrixD[] matrixRef = null)
                {
                    var bbPool     = instance.bbPoolBack;
                    var bbDataBack = instance.triangleList;
                    int index      = bbDataBack.Count;
                    var matList    = instance.matrixBuf;
                    var matTable   = instance.matrixTable;

                    // Find matrix index in table or add it
                    int matrixID = -1;

                    if (matrixRef != null && !matTable.TryGetValue(matrixRef, out matrixID))
                    {
                        matrixID = matList.Count;
                        matList.Add(matrixRef[0]);
                        matTable.Add(matrixRef, matrixID);
                    }

                    var bb = new TriangleBillboardData
                    {
                        Item1 = BlendTypeEnum.PostPP,
                        Item2 = new Vector2I(index, matrixID),
                        Item3 = mat.textureID,
                        Item4 = mat.bbColor,
                        Item5 = new MyTuple <Vector2, Vector2, Vector2>
                                (
                            mat.texCoords.Point0,
                            mat.texCoords.Point1,
                            mat.texCoords.Point2
                                ),
                        Item6 = new MyTuple <Vector3D, Vector3D, Vector3D>
                                (
                            triangle.Point0,
                            triangle.Point1,
                            triangle.Point2
                                ),
                    };

                    bbDataBack.Add(bb);

                    if (index >= bbPool.Count)
                    {
                        instance.AddNewBB(index - (bbPool.Count - 1));
                    }

                    MyTransparentGeometry.AddBillboard(bbPool[index], false);
                }
Ejemplo n.º 2
0
                /// <summary>
                /// Renders a polygon from a given set of unique vertex coordinates. Triangles are defined by their
                /// indices.
                /// </summary>
                public static void AddTriangles(IReadOnlyList <int> indices, IReadOnlyList <Vector3D> vertices, ref TriMaterial mat, MatrixD[] matrixRef = null)
                {
                    var bbPool     = instance.bbPoolBack;
                    var bbDataBack = instance.triangleList;
                    var bbBuf      = instance.bbBuf;
                    var matList    = instance.matrixBuf;
                    var matTable   = instance.matrixTable;

                    // Find matrix index in table or add it
                    int matrixID = -1;

                    if (matrixRef != null && !matTable.TryGetValue(matrixRef, out matrixID))
                    {
                        matrixID = matList.Count;
                        matList.Add(matrixRef[0]);
                        matTable.Add(matrixRef, matrixID);
                    }

                    int triangleCount = indices.Count / 3,
                        bbRemaining   = bbPool.Count - bbDataBack.Count,
                        bbToAdd       = Math.Max(triangleCount - bbRemaining, 0);

                    instance.AddNewBB(bbToAdd);

                    for (int i = bbDataBack.Count; i < triangleCount + bbDataBack.Count; i++)
                    {
                        bbBuf.Add(bbPool[i]);
                    }

                    MyTransparentGeometry.AddBillboards(bbBuf, false);
                    bbBuf.Clear();

                    bbDataBack.EnsureCapacity(bbDataBack.Count + triangleCount);

                    for (int i = 0; i < indices.Count; i += 3)
                    {
                        var bb = new TriangleBillboardData
                        {
                            Item1 = BlendTypeEnum.PostPP,
                            Item2 = new Vector2I(bbDataBack.Count, matrixID),
                            Item3 = mat.textureID,
                            Item4 = mat.bbColor,
                            Item5 = new MyTuple <Vector2, Vector2, Vector2>
                                    (
                                mat.texCoords.Point0,
                                mat.texCoords.Point1,
                                mat.texCoords.Point2
                                    ),
                            Item6 = new MyTuple <Vector3D, Vector3D, Vector3D>
                                    (
                                vertices[indices[i]],
                                vertices[indices[i + 1]],
                                vertices[indices[i + 2]]
                                    ),
                        };
                        bbDataBack.Add(bb);
                    }
                }
Ejemplo n.º 3
0
 public void setBpmMaterials(float newBpm)
 {
     LeftMaterial.SetFloat("BPM", newBpm);
     TriMaterial.SetFloat("BPM", newBpm / 4.0f);
     CenterMaterial.SetFloat("BPM", newBpm);
 }