2019-10-16 01:27:17 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using OpenTK.Graphics.OpenGL;
|
|
|
|
|
using OpenTK;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using Toolbox.Library.IO;
|
|
|
|
|
|
|
|
|
|
namespace Toolbox.Library
|
|
|
|
|
{
|
|
|
|
|
public class Render2D
|
|
|
|
|
{
|
|
|
|
|
public static void DrawRectangle(float width, float height, Vector3 translate, Vector3 rotate, Vector3 scale)
|
|
|
|
|
{
|
|
|
|
|
GL.PushMatrix();
|
|
|
|
|
|
|
|
|
|
GL.Scale(scale);
|
|
|
|
|
GL.Rotate(rotate.X, new Vector3(1, 0, 0));
|
|
|
|
|
GL.Rotate(rotate.Y, new Vector3(0, 1, 0));
|
|
|
|
|
GL.Rotate(rotate.Z, new Vector3(0, 0, 1));
|
|
|
|
|
GL.Translate(translate);
|
|
|
|
|
|
|
|
|
|
DrawRectangle(width, height, Color.White, false);
|
|
|
|
|
|
|
|
|
|
GL.PopMatrix();
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-27 02:28:56 +02:00
|
|
|
|
public static void DrawFilledCircle(Vector3 Position, Color color, float radius = 300, byte transparency = 255, bool outline = false)
|
2019-10-16 01:27:17 +02:00
|
|
|
|
{
|
|
|
|
|
GL.PushMatrix();
|
2019-10-27 02:28:56 +02:00
|
|
|
|
GL.Translate(Position.X, Position.Y, Position.Z);
|
2019-10-20 18:57:48 +02:00
|
|
|
|
GL.Scale(radius, radius, 1);
|
|
|
|
|
|
|
|
|
|
GL.Color4(color.R, color.G, color.B, transparency);
|
|
|
|
|
GL.Begin(PrimitiveType.TriangleFan);
|
|
|
|
|
for (int i = 0; i <= 300; i++)
|
|
|
|
|
{
|
|
|
|
|
double angle = 2 * Math.PI * i / 300;
|
|
|
|
|
double x = Math.Cos(angle);
|
|
|
|
|
double y = Math.Sin(angle);
|
|
|
|
|
GL.Vertex2(x, y);
|
|
|
|
|
}
|
|
|
|
|
GL.End();
|
|
|
|
|
|
|
|
|
|
GL.PopMatrix();
|
|
|
|
|
|
|
|
|
|
if (outline)
|
|
|
|
|
DrawCircle(Position, color.Darken(20), radius);
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-27 02:28:56 +02:00
|
|
|
|
public static void DrawCircle(Vector3 Position, Color color, float radius = 300)
|
2019-10-20 18:57:48 +02:00
|
|
|
|
{
|
|
|
|
|
GL.PushMatrix();
|
2019-10-27 02:28:56 +02:00
|
|
|
|
GL.Translate(Position.X, Position.Y, Position.Z);
|
2019-10-20 18:57:48 +02:00
|
|
|
|
GL.Scale(radius, radius, 1);
|
2019-10-16 01:27:17 +02:00
|
|
|
|
|
|
|
|
|
GL.Color4(color);
|
|
|
|
|
GL.Begin(PrimitiveType.LineLoop);
|
|
|
|
|
for (int i = 0; i <= 300; i++)
|
|
|
|
|
{
|
|
|
|
|
double angle = 2 * Math.PI * i / 300;
|
|
|
|
|
double x = Math.Cos(angle);
|
|
|
|
|
double y = Math.Sin(angle);
|
|
|
|
|
GL.Vertex2(x, y);
|
|
|
|
|
}
|
|
|
|
|
GL.End();
|
|
|
|
|
|
|
|
|
|
GL.PopMatrix();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void DrawRectangle(float width, float height, Color color, bool wireframe)
|
|
|
|
|
{
|
|
|
|
|
if (wireframe)
|
|
|
|
|
{
|
|
|
|
|
GL.Begin(PrimitiveType.LineLoop);
|
|
|
|
|
GL.LineWidth(1);
|
|
|
|
|
GL.Color4(color);
|
|
|
|
|
GL.Vertex2(-width, -height);
|
|
|
|
|
GL.Vertex2(width, -height);
|
|
|
|
|
GL.Vertex2(width, height);
|
|
|
|
|
GL.Vertex2(-width, height);
|
|
|
|
|
GL.End();
|
|
|
|
|
|
|
|
|
|
GL.PopAttrib();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GL.Begin(PrimitiveType.Quads);
|
|
|
|
|
GL.Color4(color);
|
|
|
|
|
GL.TexCoord2(-1, -1);
|
|
|
|
|
GL.Vertex2(-width, -height);
|
|
|
|
|
GL.TexCoord2(0, -1);
|
|
|
|
|
GL.Vertex2(width, -height);
|
|
|
|
|
GL.TexCoord2(0, 0);
|
|
|
|
|
GL.Vertex2(width, height);
|
|
|
|
|
GL.TexCoord2(-1, 0);
|
|
|
|
|
GL.Vertex2(-width, height);
|
|
|
|
|
GL.End();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void DrawGrid(Color color)
|
|
|
|
|
{
|
|
|
|
|
var size = 40;
|
|
|
|
|
var amount = 300;
|
|
|
|
|
|
|
|
|
|
GL.LineWidth(0.001f);
|
|
|
|
|
GL.Color3(color.Darken(20));
|
|
|
|
|
GL.Begin(PrimitiveType.Lines);
|
|
|
|
|
|
|
|
|
|
int squareGridCounter = 0;
|
|
|
|
|
for (var i = -amount; i <= amount; i++)
|
|
|
|
|
{
|
|
|
|
|
if (squareGridCounter > 5)
|
|
|
|
|
{
|
|
|
|
|
squareGridCounter = 0;
|
|
|
|
|
GL.LineWidth(33f);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GL.LineWidth(0.001f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GL.Vertex2(new Vector2(-amount * size, i * size));
|
|
|
|
|
GL.Vertex2(new Vector2(amount * size, i * size));
|
|
|
|
|
GL.Vertex2(new Vector2(i * size, -amount * size));
|
|
|
|
|
GL.Vertex2(new Vector2(i * size, amount * size));
|
|
|
|
|
|
|
|
|
|
squareGridCounter++;
|
|
|
|
|
}
|
|
|
|
|
GL.End();
|
|
|
|
|
GL.Color3(Color.Transparent);
|
|
|
|
|
GL.PopAttrib();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|