/// <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); }
/// <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); } }
public void setBpmMaterials(float newBpm) { LeftMaterial.SetFloat("BPM", newBpm); TriMaterial.SetFloat("BPM", newBpm / 4.0f); CenterMaterial.SetFloat("BPM", newBpm); }