summaryrefslogtreecommitdiffstats
path: root/dev/MinGfx/src/quick_shapes.h
diff options
context:
space:
mode:
authorMatt Strapp <matt@mattstrapp.net>2021-09-20 18:15:14 -0500
committerMatt Strapp <matt@mattstrapp.net>2021-09-20 18:15:14 -0500
commit342403a02f8063903d0f38327430721d4d0ae331 (patch)
tree29d020a27bc16939c568dd4b29166566d1c0e658 /dev/MinGfx/src/quick_shapes.h
parentFix parenthesis (diff)
downloadcsci4611-342403a02f8063903d0f38327430721d4d0ae331.tar
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.gz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.bz2
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.lz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.xz
csci4611-342403a02f8063903d0f38327430721d4d0ae331.tar.zst
csci4611-342403a02f8063903d0f38327430721d4d0ae331.zip
Diffstat (limited to 'dev/MinGfx/src/quick_shapes.h')
-rw-r--r--dev/MinGfx/src/quick_shapes.h506
1 files changed, 253 insertions, 253 deletions
diff --git a/dev/MinGfx/src/quick_shapes.h b/dev/MinGfx/src/quick_shapes.h
index c38ac52..b903329 100644
--- a/dev/MinGfx/src/quick_shapes.h
+++ b/dev/MinGfx/src/quick_shapes.h
@@ -1,254 +1,254 @@
-/*
- This file is part of the MinGfx Project.
-
- Copyright (c) 2017,2018 Regents of the University of Minnesota.
- All Rights Reserved.
-
- Original Author(s) of this File:
- Dan Keefe, 2017, University of Minnesota
-
- Author(s) of Significant Updates/Modifications to the File:
- ...
- */
-
-#ifndef SRC_QUICK_SHAPES_H_
-#define SRC_QUICK_SHAPES_H_
-
-#include "color.h"
-#include "default_shader.h"
-#include "mesh.h"
-#include "point3.h"
-#include "shader_program.h"
-#include "texture2d.h"
-#include "vector3.h"
-#include "matrix4.h"
-
-#include <vector>
-
-
-
-namespace mingfx {
-
-/** This class provides a quick way to draw shapes for use in debugging or
- simple scenes. You can specify the color for each shape as part of the
- Draw...() call. Other lighting parameters (the intensity of the light,
- advanced material properties) are pre-set to reasonable defaults that apply
- to all of the shapes drawn. You can edit these if you wish, but note that
- the intent of this class is just to provide a quick way to draw shapes --
- this is not the right tool to use if you wish to do quality renderings and
- use multiple types of materials.
-
- Example usage:
- ~~~
- // define a new QuickShapes object during initialization, or as a class
- // member variable
- QuickShapes quick_shapes;
-
-
- void DrawUsingOpenGL() {
- // later, in your draw routine, use it to draw shapes
- Matrix4 view = Matrix4::LookAt(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0));
- Matrix4 proj = Matrix4::Perspective(60.0, aspect_ratio(), 0.1, 10.0);
-
- Matrix4 m_cube = Matrix4::Translation(Vector3(-2.5,0,0)) * Matrix4::Scale(Vector3(0.5, 0.5, 0.5));
- quick_shapes.DrawCube(m_cube, view, proj, Color(1,1,1));
-
- Matrix4 m_sphere = Matrix4::Scale(Vector3(2.5, 2.5, 2.5));
- quick_shapes.DrawSphere(m_sphere, view, proj, Color(1,1,1));
-
- Matrix4 m_loop;
- std::vector<Point3> loop;
- loop.push_back(Point3( 4.0, 4.0, -4.0));
- loop.push_back(Point3(-4.0, 4.0, -4.0));
- loop.push_back(Point3(-4.0, 4.0, 4.0));
- loop.push_back(Point3( 4.0, 4.0, 4.0));
- quick_shapes.DrawLines(m_loop, view, proj, Color(1,1,1), loop, QuickShapes::LinesType::LINE_LOOP, 0.1);
- }
- ~~~
- */
-class QuickShapes {
-public:
-
- QuickShapes();
- virtual ~QuickShapes();
-
-
- // -------- 3D PRIMITIVES --------
-
- /** Draws a cube with extents -1 to 1 given the model, view, and projection
- matrices provided and using the supplied color as a material property.
- */
- void DrawCube(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color);
-
- /** Draws a cylinder with radius 1 and height y=-1 to 1 given the model,
- view, and projection matrices provided and using the supplied color as a
- material property.
- */
- void DrawCylinder(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color);
-
- /** Draws a cone with radius 1 and height y=-1 to 1 given the model,
- view, and projection matrices provided and using the supplied color as a
- material property.
- */
- void DrawCone(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color);
-
- /** Draws a sphere with radius 1 given the model, view, and projection
- matrices provided and using the supplied color as a material property.
- */
- void DrawSphere(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color);
-
- /** Draws the classic 3D paintbrush cursor from the 2001 Keefe et al.
- CavePainting paper. The tip of the brush is at (0,0,0), the front
- flat edge runs along the X axis, and the handle runs in the +Z direction.
- */
- void DrawBrush(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color);
-
-
- // -------- 3D COMPOSITE SHAPES --------
-
- /** Draws a cylinder between the two points.
- */
- void DrawLineSegment(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color,
- const Point3 &p1,
- const Point3 &p2,
- float radius);
-
- enum class LinesType {
- LINES,
- LINE_STRIP,
- LINE_LOOP
- };
-
- /** Draws a series of line segments. Using linesType=LINES connects each
- consecutive pair of points in the points array with a line. A linesType=LINE_STRIP
- will connect each point to the next. And, a linesType=LINE_LOOP will connect
- each point to the next and in addition connect the last to the first. Example:
- ~~~
- Matrix4 model;
- Matrix4 view = Matrix4::LookAt(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0));
- Matrix4 proj = Matrix4::Perspective(60.0, aspect_ratio(), 0.1, 10.0);
- std::vector<Point3> loop;
- loop.push_back(Point3( 4.0, 4.0, -4.0));
- loop.push_back(Point3(-4.0, 4.0, -4.0));
- loop.push_back(Point3(-4.0, 4.0, 4.0));
- loop.push_back(Point3( 4.0, 4.0, 4.0));
- quick_shapes.DrawLines(model, view, proj, Color(1,1,1), loop, QuickShapes::LinesType::LINE_LOOP, 0.1);
- ~~~
- */
- void DrawLines(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color,
- const std::vector<Point3> &points,
- LinesType linesType,
- float radius);
-
- /** Draws an arrow originating at point p and extending in the direction and
- length specified by dir. radius is the radius of the cylinder used to
- draw the shaft of the arrow.
- */
- void DrawArrow(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix,
- const Color &color,
- Point3 p, Vector3 dir, float radius);
-
- /** Draws a right handed set of axes at the coordinate frame specified by
- the modelMatrix. The arrows are 1 unit in length and colored based
- on the axis: X=red, Y=green, Z=blue.
- */
- void DrawAxes(const Matrix4 &modelMatrix,
- const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix);
-
-
- // -------- 2D PRIMITIVES --------
-
- /** Draws a square in the X-Y plane with extents -1 to 1 and normal in the
- +Y direction. Uses the model, view, and projection matrices provided
- and the supplied color as a material property.
- */
- void DrawSquare(const Matrix4 &modelMatrix, const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix, const Color &color);
-
- /** Draws a square, which you can deform into some other shape by adjusting
- the model matrix, and applies a texture to it. The texture must already
- be bound to the OpenGL textureID provided. The square lies in the X-Y
- plane with extents -1 to 1 and normal in the +Y direction. No lighting
- is applied.
- */
- void DrawSquare(const Matrix4 &modelMatrix, const Matrix4 &viewMatrix,
- const Matrix4 &projectionMatrix, const Color &color,
- const Texture2D &texture);
-
- /** Draws a background texture across the whole screen. Typically, you will
- want to do this before any other draw calls.
- */
- void DrawFullscreenTexture(const Color &color, const Texture2D &texture);
-
-
- /** Returns a pointer to the default shader used internally by the Draw class
- so that you may change the default lighting properties if you wish.
- */
- DefaultShader* default_shader();
-
- /** Returns a pointer to the default material properties for the shapes so
- that you may adjust the reflectance properties used by all the shapes
- if needed.
- */
- DefaultShader::MaterialProperties* material();
-
-
-private:
-
- void DrawWithFullscreen(const Color &color, Mesh *mesh, const Texture2D &tex);
-
- Mesh cubeMesh_;
- void initCube();
-
- Mesh squareMesh_;
- void initSquare();
-
- Mesh fullMesh_;
- void initFull();
-
- Mesh cylMesh_;
- void initCyl();
-
- Mesh coneMesh_;
- void initCone();
-
- Mesh sphereMesh_;
- void initSph();
-
- Mesh brushMesh_;
- void initBrush();
-
- DefaultShader defaultShader_;
- DefaultShader::MaterialProperties defaultMaterial_;
- Texture2D emptyTex_;
-
- ShaderProgram fullscreenShader_;
-};
-
-} // end namespace
-
+/*
+ This file is part of the MinGfx Project.
+
+ Copyright (c) 2017,2018 Regents of the University of Minnesota.
+ All Rights Reserved.
+
+ Original Author(s) of this File:
+ Dan Keefe, 2017, University of Minnesota
+
+ Author(s) of Significant Updates/Modifications to the File:
+ ...
+ */
+
+#ifndef SRC_QUICK_SHAPES_H_
+#define SRC_QUICK_SHAPES_H_
+
+#include "color.h"
+#include "default_shader.h"
+#include "mesh.h"
+#include "point3.h"
+#include "shader_program.h"
+#include "texture2d.h"
+#include "vector3.h"
+#include "matrix4.h"
+
+#include <vector>
+
+
+
+namespace mingfx {
+
+/** This class provides a quick way to draw shapes for use in debugging or
+ simple scenes. You can specify the color for each shape as part of the
+ Draw...() call. Other lighting parameters (the intensity of the light,
+ advanced material properties) are pre-set to reasonable defaults that apply
+ to all of the shapes drawn. You can edit these if you wish, but note that
+ the intent of this class is just to provide a quick way to draw shapes --
+ this is not the right tool to use if you wish to do quality renderings and
+ use multiple types of materials.
+
+ Example usage:
+ ~~~
+ // define a new QuickShapes object during initialization, or as a class
+ // member variable
+ QuickShapes quick_shapes;
+
+
+ void DrawUsingOpenGL() {
+ // later, in your draw routine, use it to draw shapes
+ Matrix4 view = Matrix4::LookAt(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0));
+ Matrix4 proj = Matrix4::Perspective(60.0, aspect_ratio(), 0.1, 10.0);
+
+ Matrix4 m_cube = Matrix4::Translation(Vector3(-2.5,0,0)) * Matrix4::Scale(Vector3(0.5, 0.5, 0.5));
+ quick_shapes.DrawCube(m_cube, view, proj, Color(1,1,1));
+
+ Matrix4 m_sphere = Matrix4::Scale(Vector3(2.5, 2.5, 2.5));
+ quick_shapes.DrawSphere(m_sphere, view, proj, Color(1,1,1));
+
+ Matrix4 m_loop;
+ std::vector<Point3> loop;
+ loop.push_back(Point3( 4.0, 4.0, -4.0));
+ loop.push_back(Point3(-4.0, 4.0, -4.0));
+ loop.push_back(Point3(-4.0, 4.0, 4.0));
+ loop.push_back(Point3( 4.0, 4.0, 4.0));
+ quick_shapes.DrawLines(m_loop, view, proj, Color(1,1,1), loop, QuickShapes::LinesType::LINE_LOOP, 0.1);
+ }
+ ~~~
+ */
+class QuickShapes {
+public:
+
+ QuickShapes();
+ virtual ~QuickShapes();
+
+
+ // -------- 3D PRIMITIVES --------
+
+ /** Draws a cube with extents -1 to 1 given the model, view, and projection
+ matrices provided and using the supplied color as a material property.
+ */
+ void DrawCube(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color);
+
+ /** Draws a cylinder with radius 1 and height y=-1 to 1 given the model,
+ view, and projection matrices provided and using the supplied color as a
+ material property.
+ */
+ void DrawCylinder(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color);
+
+ /** Draws a cone with radius 1 and height y=-1 to 1 given the model,
+ view, and projection matrices provided and using the supplied color as a
+ material property.
+ */
+ void DrawCone(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color);
+
+ /** Draws a sphere with radius 1 given the model, view, and projection
+ matrices provided and using the supplied color as a material property.
+ */
+ void DrawSphere(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color);
+
+ /** Draws the classic 3D paintbrush cursor from the 2001 Keefe et al.
+ CavePainting paper. The tip of the brush is at (0,0,0), the front
+ flat edge runs along the X axis, and the handle runs in the +Z direction.
+ */
+ void DrawBrush(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color);
+
+
+ // -------- 3D COMPOSITE SHAPES --------
+
+ /** Draws a cylinder between the two points.
+ */
+ void DrawLineSegment(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color,
+ const Point3 &p1,
+ const Point3 &p2,
+ float radius);
+
+ enum class LinesType {
+ LINES,
+ LINE_STRIP,
+ LINE_LOOP
+ };
+
+ /** Draws a series of line segments. Using linesType=LINES connects each
+ consecutive pair of points in the points array with a line. A linesType=LINE_STRIP
+ will connect each point to the next. And, a linesType=LINE_LOOP will connect
+ each point to the next and in addition connect the last to the first. Example:
+ ~~~
+ Matrix4 model;
+ Matrix4 view = Matrix4::LookAt(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0));
+ Matrix4 proj = Matrix4::Perspective(60.0, aspect_ratio(), 0.1, 10.0);
+ std::vector<Point3> loop;
+ loop.push_back(Point3( 4.0, 4.0, -4.0));
+ loop.push_back(Point3(-4.0, 4.0, -4.0));
+ loop.push_back(Point3(-4.0, 4.0, 4.0));
+ loop.push_back(Point3( 4.0, 4.0, 4.0));
+ quick_shapes.DrawLines(model, view, proj, Color(1,1,1), loop, QuickShapes::LinesType::LINE_LOOP, 0.1);
+ ~~~
+ */
+ void DrawLines(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color,
+ const std::vector<Point3> &points,
+ LinesType linesType,
+ float radius);
+
+ /** Draws an arrow originating at point p and extending in the direction and
+ length specified by dir. radius is the radius of the cylinder used to
+ draw the shaft of the arrow.
+ */
+ void DrawArrow(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix,
+ const Color &color,
+ Point3 p, Vector3 dir, float radius);
+
+ /** Draws a right handed set of axes at the coordinate frame specified by
+ the modelMatrix. The arrows are 1 unit in length and colored based
+ on the axis: X=red, Y=green, Z=blue.
+ */
+ void DrawAxes(const Matrix4 &modelMatrix,
+ const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix);
+
+
+ // -------- 2D PRIMITIVES --------
+
+ /** Draws a square in the X-Y plane with extents -1 to 1 and normal in the
+ +Y direction. Uses the model, view, and projection matrices provided
+ and the supplied color as a material property.
+ */
+ void DrawSquare(const Matrix4 &modelMatrix, const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix, const Color &color);
+
+ /** Draws a square, which you can deform into some other shape by adjusting
+ the model matrix, and applies a texture to it. The texture must already
+ be bound to the OpenGL textureID provided. The square lies in the X-Y
+ plane with extents -1 to 1 and normal in the +Y direction. No lighting
+ is applied.
+ */
+ void DrawSquare(const Matrix4 &modelMatrix, const Matrix4 &viewMatrix,
+ const Matrix4 &projectionMatrix, const Color &color,
+ const Texture2D &texture);
+
+ /** Draws a background texture across the whole screen. Typically, you will
+ want to do this before any other draw calls.
+ */
+ void DrawFullscreenTexture(const Color &color, const Texture2D &texture);
+
+
+ /** Returns a pointer to the default shader used internally by the Draw class
+ so that you may change the default lighting properties if you wish.
+ */
+ DefaultShader* default_shader();
+
+ /** Returns a pointer to the default material properties for the shapes so
+ that you may adjust the reflectance properties used by all the shapes
+ if needed.
+ */
+ DefaultShader::MaterialProperties* material();
+
+
+private:
+
+ void DrawWithFullscreen(const Color &color, Mesh *mesh, const Texture2D &tex);
+
+ Mesh cubeMesh_;
+ void initCube();
+
+ Mesh squareMesh_;
+ void initSquare();
+
+ Mesh fullMesh_;
+ void initFull();
+
+ Mesh cylMesh_;
+ void initCyl();
+
+ Mesh coneMesh_;
+ void initCone();
+
+ Mesh sphereMesh_;
+ void initSph();
+
+ Mesh brushMesh_;
+ void initBrush();
+
+ DefaultShader defaultShader_;
+ DefaultShader::MaterialProperties defaultMaterial_;
+ Texture2D emptyTex_;
+
+ ShaderProgram fullscreenShader_;
+};
+
+} // end namespace
+
#endif \ No newline at end of file