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); } } }