Switch-Toolbox/Switch_Toolbox_Library/OpenGL/Render2D.cs
KillzXGaming 8939687f6a Update files.
Load vertex positions for layouts in rectangle class. This will be used for proper rotation adjusting.
Add latest muunt editor files.
Add somewhat functional mk8 camera bin editor. Points can be moved around. The map orientation determines the position of the icons to map over the model.
Fix window content UV map for layouts.
Add 2D KCL renderer for top down KCL preview for both muunt and camera editors.
2019-10-26 20:28:56 -04:00

138 lines
4.1 KiB
C#

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();
}
public static void DrawFilledCircle(Vector3 Position, Color color, float radius = 300, byte transparency = 255, bool outline = false)
{
GL.PushMatrix();
GL.Translate(Position.X, Position.Y, Position.Z);
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);
}
public static void DrawCircle(Vector3 Position, Color color, float radius = 300)
{
GL.PushMatrix();
GL.Translate(Position.X, Position.Y, Position.Z);
GL.Scale(radius, radius, 1);
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();
}
}
}