diff options
Diffstat (limited to 'dev/MinGfx/src/gfxmath.h')
-rw-r--r-- | dev/MinGfx/src/gfxmath.h | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/dev/MinGfx/src/gfxmath.h b/dev/MinGfx/src/gfxmath.h index 09a3a1d..8bb6c25 100644 --- a/dev/MinGfx/src/gfxmath.h +++ b/dev/MinGfx/src/gfxmath.h @@ -1,81 +1,81 @@ -/* - 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, 2018, University of Minnesota - - Author(s) of Significant Updates/Modifications to the File: - ... - */ - -#ifndef SRC_GFXMATH_H_ -#define SRC_GFXMATH_H_ - -#include "point2.h" -#include "point3.h" -#include "vector3.h" -#include "matrix4.h" - -namespace mingfx { - - -/** This class holds a variety of static math functions that are useful to have - defined with creating graphics programs. - */ -class GfxMath { -public: - - /// Returns a if x is less than a and b if x is greater than b. - static float Clamp(float x, float a, float b); - - static float ToRadians(float degrees); - - static float ToDegrees(float radians); - - static Vector3 ToRadians(Vector3 degrees); - - static Vector3 ToDegrees(Vector3 radians); - - static float Lerp(float a, float b, float alpha); - - static int iLerp(int a, int b, float alpha); - - /// Converts a 2D point on the filmplane represented in Normalized Device - /// Coorindates, which means (-1,1) for the top left corner of the screen and - /// (1,-1) for the bottom right corner, to a 3D point that lies on the camera's - /// near plane. Useful for converting mouse coordinates into a 3D point. - /// Remember that this uses NORMALIZED device coordinates for the screenPt, - /// not pixels. GraphicsApp and most other graphics engines report mouse move - /// events in pixels, so you need to convert these to normalized device coordinates - /// first. If you are using GraphicsApp, you can do this with: - /// Point2 normPos = graphicsApp->pixels_to_normalized_coordinates(mousePos); - static Point3 ScreenToNearPlane(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt); - - /// Similar to filmplane2D_to_nearplane3D() but here rather than using the - /// nearplane, you specify the depth of the plane to use as a distance away - /// from the camera's focal point. - static Point3 ScreenToDepthPlane(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt, float planeDepth); - - /// Converts a 2D point on the filmplane represented in Normalized Device - /// Coorindates, which means (-1,1) for the top left corner of the screen and - /// (1,-1) for the bottom right corner, to a 3D point in the world. The depth - /// buffer value under the pixel must be supplied. If you are using GraphicsApp, - /// you can use the mouse pos in pixels to get the required arguments like this: - /// Point2 normPos = graphicsApp->pixels_to_normalized_coordinates(mousePos); - /// float normZ = graphicsApp->z_value_at_pixel(mousePos); - static Point3 ScreenToWorld(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt, float normalizedZ); - - - static const float PI; - static const float TWO_PI; - static const float HALF_PI; -}; - - - -} // 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, 2018, University of Minnesota
+
+ Author(s) of Significant Updates/Modifications to the File:
+ ...
+ */
+
+#ifndef SRC_GFXMATH_H_
+#define SRC_GFXMATH_H_
+
+#include "point2.h"
+#include "point3.h"
+#include "vector3.h"
+#include "matrix4.h"
+
+namespace mingfx {
+
+
+/** This class holds a variety of static math functions that are useful to have
+ defined with creating graphics programs.
+ */
+class GfxMath {
+public:
+
+ /// Returns a if x is less than a and b if x is greater than b.
+ static float Clamp(float x, float a, float b);
+
+ static float ToRadians(float degrees);
+
+ static float ToDegrees(float radians);
+
+ static Vector3 ToRadians(Vector3 degrees);
+
+ static Vector3 ToDegrees(Vector3 radians);
+
+ static float Lerp(float a, float b, float alpha);
+
+ static int iLerp(int a, int b, float alpha);
+
+ /// Converts a 2D point on the filmplane represented in Normalized Device
+ /// Coorindates, which means (-1,1) for the top left corner of the screen and
+ /// (1,-1) for the bottom right corner, to a 3D point that lies on the camera's
+ /// near plane. Useful for converting mouse coordinates into a 3D point.
+ /// Remember that this uses NORMALIZED device coordinates for the screenPt,
+ /// not pixels. GraphicsApp and most other graphics engines report mouse move
+ /// events in pixels, so you need to convert these to normalized device coordinates
+ /// first. If you are using GraphicsApp, you can do this with:
+ /// Point2 normPos = graphicsApp->pixels_to_normalized_coordinates(mousePos);
+ static Point3 ScreenToNearPlane(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt);
+
+ /// Similar to filmplane2D_to_nearplane3D() but here rather than using the
+ /// nearplane, you specify the depth of the plane to use as a distance away
+ /// from the camera's focal point.
+ static Point3 ScreenToDepthPlane(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt, float planeDepth);
+
+ /// Converts a 2D point on the filmplane represented in Normalized Device
+ /// Coorindates, which means (-1,1) for the top left corner of the screen and
+ /// (1,-1) for the bottom right corner, to a 3D point in the world. The depth
+ /// buffer value under the pixel must be supplied. If you are using GraphicsApp,
+ /// you can use the mouse pos in pixels to get the required arguments like this:
+ /// Point2 normPos = graphicsApp->pixels_to_normalized_coordinates(mousePos);
+ /// float normZ = graphicsApp->z_value_at_pixel(mousePos);
+ static Point3 ScreenToWorld(const Matrix4 &viewMatrix, const Matrix4 &projMatrix, const Point2 &normalizedScreenPt, float normalizedZ);
+
+
+ static const float PI;
+ static const float TWO_PI;
+ static const float HALF_PI;
+};
+
+
+
+} // end namespace
+
#endif
\ No newline at end of file |