Files
Pilz/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/BoundingBox.cs
2020-09-24 11:21:53 +02:00

92 lines
4.7 KiB
C#

using global::System.Drawing;
using global::OpenTK.Graphics.OpenGL;
namespace Pilz.Drawing.Drawing3D.OpenGLFactory.RenderingN
{
public class BoundingBox
{
public static void DrawSolid(System.Numerics.Vector3 scale, System.Numerics.Quaternion rot, System.Numerics.Vector3 pos, Color color, System.Numerics.Vector3 upper, System.Numerics.Vector3 lower)
{
GL.Disable(EnableCap.Blend);
GL.Disable(EnableCap.Texture2D);
GL.Disable(EnableCap.AlphaTest);
GL.PushMatrix();
GL.Translate(pos.X, pos.Y, pos.Z);
GL.Rotate(rot.X, 1f, 0f, 0f);
GL.Rotate(rot.Y, 0f, 1f, 0f);
GL.Rotate(rot.Z, 0f, 0f, 1f);
GL.Scale(scale.X, scale.Y, scale.Z);
GL.Begin(PrimitiveType.Quads);
GL.Color4(color);
GL.Vertex3(upper.X, upper.Y, lower.Z); // Top-right of top face
GL.Vertex3(lower.X, upper.Y, lower.Z); // Top-left of top face
GL.Vertex3(lower.X, upper.Y, upper.Z); // Bottom-left of top face
GL.Vertex3(upper.X, upper.Y, upper.Z); // Bottom-right of top face
GL.Vertex3(upper.X, lower.Y, lower.Z); // Top-right of bottom face
GL.Vertex3(lower.X, lower.Y, lower.Z); // Top-left of bottom face
GL.Vertex3(lower.X, lower.Y, upper.Z); // Bottom-left of bottom face
GL.Vertex3(upper.X, lower.Y, upper.Z); // Bottom-right of bottom face
GL.Vertex3(upper.X, upper.Y, upper.Z); // Top-Right of front face
GL.Vertex3(lower.X, upper.Y, upper.Z); // Top-left of front face
GL.Vertex3(lower.X, lower.Y, upper.Z); // Bottom-left of front face
GL.Vertex3(upper.X, lower.Y, upper.Z); // Bottom-right of front face
GL.Vertex3(upper.X, lower.Y, lower.Z); // Bottom-Left of back face
GL.Vertex3(lower.X, lower.Y, lower.Z); // Bottom-Right of back face
GL.Vertex3(lower.X, upper.Y, lower.Z); // Top-Right of back face
GL.Vertex3(upper.X, upper.Y, lower.Z); // Top-Left of back face
GL.Vertex3(lower.X, upper.Y, upper.Z); // Top-Right of left face
GL.Vertex3(lower.X, upper.Y, lower.Z); // Top-Left of left face
GL.Vertex3(lower.X, lower.Y, lower.Z); // Bottom-Left of left face
GL.Vertex3(lower.X, lower.Y, upper.Z); // Bottom-Right of left face
GL.Vertex3(upper.X, upper.Y, upper.Z); // Top-Right of left face
GL.Vertex3(upper.X, upper.Y, lower.Z); // Top-Left of left face
GL.Vertex3(upper.X, lower.Y, lower.Z); // Bottom-Left of left face
GL.Vertex3(upper.X, lower.Y, upper.Z); // Bottom-Right of left face
GL.Color4(Color.White);
GL.End();
GL.PopMatrix();
GL.Enable(EnableCap.Blend);
GL.Enable(EnableCap.Texture2D);
GL.Enable(EnableCap.AlphaTest);
}
public static void Draw(System.Numerics.Vector3 scale, System.Numerics.Quaternion rot, System.Numerics.Vector3 pos, Color color, System.Numerics.Vector3 upper, System.Numerics.Vector3 lower)
{
GL.Disable(EnableCap.Blend);
GL.Disable(EnableCap.Texture2D);
GL.Disable(EnableCap.AlphaTest);
GL.PushMatrix();
GL.Translate(pos.X, pos.Y, pos.Z);
GL.Rotate(rot.X, 1f, 0f, 0f);
GL.Rotate(rot.Y, 0f, 1f, 0f);
GL.Rotate(rot.Z, 0f, 0f, 1f);
GL.Scale(scale.X, scale.Y, scale.Z);
GL.Begin(PrimitiveType.LineLoop);
GL.Color4(color);
GL.Vertex3(upper.X, upper.Y, lower.Z); // 1
GL.Vertex3(lower.X, upper.Y, lower.Z); // 2
GL.Vertex3(lower.X, upper.Y, upper.Z); // 3
GL.Vertex3(upper.X, upper.Y, lower.Z); // 1
GL.Vertex3(upper.X, upper.Y, upper.Z); // 4
GL.Vertex3(lower.X, upper.Y, upper.Z); // 3
GL.Vertex3(lower.X, lower.Y, upper.Z); // 7
GL.Vertex3(lower.X, lower.Y, lower.Z); // 6
GL.Vertex3(upper.X, lower.Y, lower.Z); // 5
GL.Vertex3(lower.X, lower.Y, upper.Z); // 7
GL.Vertex3(upper.X, lower.Y, upper.Z); // 8
GL.Vertex3(upper.X, lower.Y, lower.Z); // 5
GL.Vertex3(lower.X, upper.Y, lower.Z); // 2
GL.Vertex3(lower.X, lower.Y, lower.Z); // 6
GL.Vertex3(lower.X, upper.Y, upper.Z); // 3
GL.Vertex3(upper.X, lower.Y, upper.Z); // 8
GL.Vertex3(upper.X, upper.Y, upper.Z); // 4
GL.Vertex3(upper.X, lower.Y, lower.Z); // 5
GL.Color4(Color.White);
GL.End();
GL.PopMatrix();
GL.Enable(EnableCap.Blend);
GL.Enable(EnableCap.Texture2D);
GL.Enable(EnableCap.AlphaTest);
}
}
}