/// <summary> /// Draws the given range of faces /// </summary> public override void Draw(Vector2 size, Vector2 origin, Vector2I faceRange, MatrixD[] matrixRef) { if (_sides > 2 && drawVertices.Count > 5) { if (updateVertices) { GeneratePolygon(); } if (updateMatFit) { polyMat.texBounds = matFrame.GetMaterialAlignment(size.X / size.Y); GenerateTextureCoordinates(); updateMatFit = false; } faceRange.Y++; faceRange *= 2; // Outer vertex indices are even faceRange.X -= faceRange.X % 2; faceRange.Y -= faceRange.Y % 2; // Generate final vertices for drawing from unscaled vertices for (int i = faceRange.X; i <= faceRange.Y + 1; i++) { drawVertices[i % drawVertices.Count] = origin + size * vertices[i % drawVertices.Count]; } faceRange *= 3; BillBoardUtils.AddTriangleRange(faceRange, triangles, drawVertices, ref polyMat, matrixRef); } }
/// <summary> /// Draws the given range of faces /// </summary> public virtual void Draw(Vector2 size, Vector2 origin, Vector2I faceRange, MatrixD[] matrixRef) { if (_sides > 2 && drawVertices.Count > 2) { if (updateVertices) { GeneratePolygon(); } if (updateMatFit) { polyMat.texBounds = matFrame.GetMaterialAlignment(size.X / size.Y); GenerateTextureCoordinates(); updateMatFit = false; } // Generate final vertices for drawing from unscaled vertices int max = drawVertices.Count - 1; drawVertices[max] = origin + size * vertices[max]; for (int i = 0; i < drawVertices.Count; i++) { drawVertices[i] = origin + size * vertices[i]; } faceRange *= 3; BillBoardUtils.AddTriangleRange(faceRange, triangles, drawVertices, ref polyMat, matrixRef); } }