OGRE 14.3
Object-Oriented Graphics Rendering Engine
|
Class to provide access to common mathematical functions. More...
#include <OgreMath.h>
Classes | |
class | RandomValueProvider |
This class is used to provide an external random value provider. More... | |
Public Types | |
enum | AngleUnit { AU_DEGREE , AU_RADIAN } |
The angular units used by the API. More... | |
Public Member Functions | |
Math (unsigned int trigTableSize=4096) | |
Default constructor. | |
~Math () | |
Default destructor. | |
Static Public Member Functions | |
static Degree | Abs (const Degree &dValue) |
Absolute value function. | |
static Radian | Abs (const Radian &rValue) |
Absolute value function. | |
static Real | Abs (Real fValue) |
Absolute value function. | |
static Radian | ACos (Real fValue) |
Arc cosine function. | |
static float | AngleUnitsToDegrees (float units) |
Convert from the current AngleUnit to degrees. | |
static float | AngleUnitsToRadians (float units) |
Convert from the current AngleUnit to radians. | |
static Radian | ASin (Real fValue) |
Arc sine function. | |
static Radian | ATan (float fValue) |
Arc tangent function. | |
static Radian | ATan2 (float fY, float fX) |
Arc tangent between two values function. | |
static Real | boundingRadiusFromAABB (const AxisAlignedBox &aabb) |
Get the radius of the origin-centered bounding sphere from the bounding box. | |
static Real | boundingRadiusFromAABBCentered (const AxisAlignedBox &aabb) |
Get the radius of the bbox-centered bounding sphere from the bounding box. | |
static Affine3 | buildReflectionMatrix (const Plane &p) |
Build a reflection matrix for the passed in plane. | |
static Vector3 | calculateBasicFaceNormal (const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) |
Calculate a face normal, no w-information. | |
static Vector3 | calculateBasicFaceNormalWithoutNormalize (const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) |
Calculate a face normal without normalize, no w-information. | |
static Vector4 | calculateFaceNormal (const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) |
Calculate a face normal, including the w component which is the offset from the origin. | |
static Vector4 | calculateFaceNormalWithoutNormalize (const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) |
Calculate a face normal without normalize, including the w component which is the offset from the origin. | |
static Vector3 | calculateTangentSpaceVector (const Vector3 &position1, const Vector3 &position2, const Vector3 &position3, Real u1, Real v1, Real u2, Real v2, Real u3, Real v3) |
static Real | Ceil (Real fValue) |
Ceiling function Returns the smallest following integer. | |
template<typename T > | |
static T | Clamp (T val, T minval, T maxval) |
Clamp a value within an inclusive range. | |
static float | Cos (const Radian &fValue, bool useTables=false) |
Cosine function. | |
static float | Cos (float fValue, bool useTables=false) |
Cosine function. | |
static float | DegreesToAngleUnits (float degrees) |
Convert from degrees to the current AngleUnit. | |
static float | DegreesToRadians (float degrees) |
static Real | Exp (Real fValue) |
static Real | Floor (Real fValue) |
Floor function Returns the largest previous integer. | |
static Real | gaussianDistribution (Real x, Real offset=0.0f, Real scale=1.0f) |
Generates a value based on the Gaussian (normal) distribution function with the given offset and scale parameters. | |
static AngleUnit | getAngleUnit (void) |
Get the unit being used for angles. | |
static int | IAbs (int iValue) |
static int | ICeil (float fValue) |
static int | IFloor (float fValue) |
static bool | intersects (const Plane &plane, const AxisAlignedBox &box) |
Plane / box intersection test. | |
static RayTestResult | intersects (const Ray &ray, const AxisAlignedBox &box) |
Ray / box intersection. | |
static bool | intersects (const Ray &ray, const AxisAlignedBox &box, Real *d1, Real *d2) |
Ray / box intersection, returns boolean result and two intersection distance. | |
static RayTestResult | intersects (const Ray &ray, const Plane &plane) |
Ray / plane intersection. | |
static RayTestResult | intersects (const Ray &ray, const Sphere &sphere, bool discardInside=true) |
Ray / sphere intersection. | |
static RayTestResult | intersects (const Ray &ray, const std::vector< Plane > &planeList, bool normalIsOutside) |
Ray / convex plane list intersection test. | |
static RayTestResult | intersects (const Ray &ray, const Vector3 &a, const Vector3 &b, const Vector3 &c, bool positiveSide=true, bool negativeSide=true) |
Ray / triangle intersection [12], returns boolean result and distance. | |
static RayTestResult | intersects (const Ray &ray, const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &normal, bool positiveSide=true, bool negativeSide=true) |
static bool | intersects (const Sphere &sphere, const AxisAlignedBox &box) |
Sphere / box intersection test. | |
static bool | intersects (const Sphere &sphere, const Plane &plane) |
Sphere / plane intersection test. | |
static Real | InvSqrt (Real fValue) |
Inverse square root i.e. | |
static int | ISign (int iValue) |
static bool | isNaN (Real f) |
template<typename V , typename T > | |
static V | lerp (const V &v0, const V &v1, const T &t) |
Simulate the shader function lerp which performers linear interpolation. | |
static Real | Log (Real fValue) |
static Real | Log2 (Real fValue) |
static Real | LogN (Real base, Real fValue) |
static Matrix3 | lookRotation (const Vector3 &direction, const Vector3 &yaw) |
Create a rotation matrix from direction and yaw. | |
static Matrix4 | makePerspectiveMatrix (Real left, Real right, Real bottom, Real top, Real zNear, Real zFar) |
This creates 'uniform' perspective projection matrix, which depth range [-1,1], right-handed rules. | |
static Affine3 | makeViewMatrix (const Vector3 &position, const Quaternion &orientation, const Affine3 *reflectMatrix=0) |
This creates a view matrix. | |
static bool | pointInTri2D (const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) |
Checks whether a given point is inside a triangle, in a 2-dimensional (Cartesian) space. | |
static bool | pointInTri3D (const Vector3 &p, const Vector3 &a, const Vector3 &b, const Vector3 &c, const Vector3 &normal) |
Checks whether a given 3D point is inside a triangle. | |
static Real | Pow (Real fBase, Real fExponent) |
static float | RadiansToAngleUnits (float radians) |
Convert from radians to the current AngleUnit . | |
static float | RadiansToDegrees (float radians) |
static float | RangeRandom (float fLow, float fHigh) |
Generate a random number within the range provided. | |
static bool | RealEqual (Real a, Real b, Real tolerance=std::numeric_limits< Real >::epsilon()) |
Compare 2 reals, using tolerance for inaccuracies. | |
static double | saturate (double t) |
static float | saturate (float t) |
Simulate the shader function saturate that clamps a parameter value between 0 and 1. | |
static void | setAngleUnit (AngleUnit unit) |
These functions used to set the assumed angle units (radians or degrees) expected when using the Angle type. | |
static void | SetRandomValueProvider (RandomValueProvider *provider) |
static Degree | Sign (const Degree &dValue) |
static Radian | Sign (const Radian &rValue) |
static Real | Sign (Real fValue) |
static float | Sin (const Radian &fValue, bool useTables=false) |
Sine function. | |
static float | Sin (Real fValue, bool useTables=false) |
Sine function. | |
static Real | Sqr (Real fValue) |
Squared function. | |
static Degree | Sqrt (const Degree &fValue) |
Square root function. | |
static Radian | Sqrt (const Radian &fValue) |
Square root function. | |
static Real | Sqrt (Real fValue) |
Square root function. | |
static float | SymmetricRandom () |
Generate a random number in the range [-1,1]. | |
static float | Tan (const Radian &fValue, bool useTables=false) |
Tangent function. | |
static float | Tan (Real fValue, bool useTables=false) |
Tangent function. | |
static uint16 | uint16Cast (size_t t) |
saturated cast of size_t to uint16 | |
static float | UnitRandom () |
Generate a random number of unit length. | |
Static Public Attributes | |
static constexpr float | fDeg2Rad = PI / Real(180.0) |
static constexpr float | fRad2Deg = Real(180.0) / PI |
static constexpr Real | HALF_PI = Real( 0.5 * PI ) |
static constexpr Real | LOG2 = static_cast<Real> (0.69314718055994530942) |
Stored value of log(2) for frequent use. | |
static constexpr Real | NEG_INFINITY = -std::numeric_limits<Real>::infinity() |
static constexpr Real | PI = static_cast<Real> (3.14159265358979323846) |
static constexpr Real | POS_INFINITY = std::numeric_limits<Real>::infinity() |
static constexpr Real | TWO_PI = Real( 2.0 * PI ) |
Class to provide access to common mathematical functions.
Most of the maths functions are aliased versions of the C runtime library functions. They are aliased here to provide future optimisation opportunities, either from faster RTLs or custom math approximations.
The angular units used by the API.
This functionality is now deprecated in favor of discreet angular unit types ( see Degree and Radian above ). The only place this functionality is actually still used is when parsing files. Search for usage of the Angle class for those instances
Enumerator | |
---|---|
AU_DEGREE | |
AU_RADIAN |
Default constructor.
trigTableSize | Optional parameter to set the size of the tables used to implement Sin, Cos, Tan |
Ogre::Math::~Math | ( | ) |
Default destructor.
Absolute value function.
fValue | The value whose absolute value will be returned. |
Referenced by Ogre::VectorBase< 3, Real >::absDotProduct(), Ogre::VectorBase< 3, Real >::directionEquals(), Ogre::Quaternion::equals(), Ogre::VectorBase< 3, Real >::getRotationTo(), Ogre::Ray::intersects(), Ogre::Sphere::intersects(), Ogre::VectorBase< 3, Real >::perpendicular(), Ogre::VectorBase< 3, Real >::primaryAxis(), and Ogre::AxisAlignedBox::transform().
Absolute value function.
dValue | The value, in degrees, whose absolute value will be returned. |
Absolute value function.
rValue | The value, in radians, whose absolute value will be returned. |
Arc cosine function.
fValue | The value whose arc cosine will be returned. |
Referenced by Ogre::VectorBase< 3, Real >::directionEquals(), and Ogre::Quaternion::equals().
Arc sine function.
fValue | The value whose arc sine will be returned. |
Arc tangent function.
fValue | The value whose arc tangent will be returned. |
Arc tangent between two values function.
fY | The first value to calculate the arc tangent with. |
fX | The second value to calculate the arc tangent with. |
Ceiling function Returns the smallest following integer.
(example: Ceil(1.1) = 2)
fValue | The value to round up to the nearest integer. |
Referenced by Ogre::DualQuaternion::isNaN(), and Ogre::Quaternion::isNaN().
Cosine function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Referenced by Ogre::VectorBase< 2, Real >::randomDeviant().
Cosine function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Floor function Returns the largest previous integer.
(example: Floor(1.9) = 1)
fValue | The value to round down to the nearest integer. |
Simulate the shader function saturate that clamps a parameter value between 0 and 1.
Simulate the shader function lerp which performers linear interpolation.
given 3 parameters v0, v1 and t the function returns the value of (1 - t)* v0 + t * v1. where v0 and v1 are matching vector or scalar types and t can be either a scalar or a vector of the same type as a and b.
Sine function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Referenced by Ogre::VectorBase< 2, Real >::randomDeviant().
Sine function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Squared function.
fValue | The value to be squared (fValue^2) |
Referenced by Ogre::Sphere::intersects(), Ogre::Sphere::intersects(), and Ogre::Sphere::merge().
Square root function.
fValue | The value whose square root will be calculated. |
Referenced by Ogre::AxisAlignedBox::distance(), Ogre::VectorBase< 3, Real >::getRotationTo(), Ogre::Ray::intersects(), Ogre::Sphere::merge(), and Ogre::Quaternion::Norm().
Square root function.
fValue | The value, in radians, whose square root will be calculated. |
Square root function.
fValue | The value, in degrees, whose square root will be calculated. |
Inverse square root i.e.
1 / Sqrt(x), good for vector normalisation.
fValue | The value whose inverse square root will be calculated. |
Generate a random number of unit length.
References Ogre::Math::RandomValueProvider::getRandomUnit().
Referenced by Ogre::VectorBase< 3, Real >::randomDeviant().
Generate a random number within the range provided.
fLow | The lower bound of the range. |
fHigh | The upper bound of the range. |
Referenced by Ogre::VectorBase< 2, Real >::randomDeviant().
Generate a random number in the range [-1,1].
|
static |
Tangent function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Tangent function.
fValue | Angle in radians |
useTables | If true, uses lookup tables rather than calculation - faster but less accurate. |
Referenced by Ogre::Degree::valueRadians().
Referenced by Ogre::Radian::valueDegrees().
Convert from the current AngleUnit to radians.
Referenced by Ogre::Angle::operator Radian().
Convert from radians to the current AngleUnit .
Referenced by Ogre::Radian::valueAngleUnits().
Convert from the current AngleUnit to degrees.
Referenced by Ogre::Angle::operator Degree().
Convert from degrees to the current AngleUnit.
Referenced by Ogre::Degree::valueAngleUnits().
|
static |
Checks whether a given point is inside a triangle, in a 2-dimensional (Cartesian) space.
The vertices of the triangle must be given in either trigonometrical (anticlockwise) or inverse trigonometrical (clockwise) order.
p | The point. |
a | The triangle's first vertex. |
b | The triangle's second vertex. |
c | The triangle's third vertex. |
|
static |
Checks whether a given 3D point is inside a triangle.
The vertices of the triangle must be given in either trigonometrical (anticlockwise) or inverse trigonometrical (clockwise) order, and the point must be guaranteed to be in the same plane as the triangle
p | p The point. |
a | The triangle's first vertex. |
b | The triangle's second vertex. |
c | The triangle's third vertex. |
normal | The triangle plane's normal (passed in rather than calculated on demand since the caller may already have it) |
|
static |
Ray / box intersection.
|
static |
Ray / box intersection, returns boolean result and two intersection distance.
ray | The ray. |
box | The box. |
d1 | A real pointer to retrieve the near intersection distance from the ray origin, maybe null which means don't care about the near intersection distance. |
d2 | A real pointer to retrieve the far intersection distance from the ray origin, maybe null which means don't care about the far intersection distance. |
|
static |
Ray / triangle intersection [12], returns boolean result and distance.
ray | The ray. |
a | The triangle's first vertex. |
b | The triangle's second vertex. |
c | The triangle's third vertex. |
positiveSide | Intersect with "positive side" of the triangle (as determined by vertex winding) |
negativeSide | Intersect with "negative side" of the triangle (as determined by vertex winding) |
|
inlinestatic |
Sphere / box intersection test.
|
static |
Ray / convex plane list intersection test.
ray | The ray to test with |
planeList | List of planes which form a convex volume |
normalIsOutside | Does the normal point outside the volume |
|
inlinestatic |
Compare 2 reals, using tolerance for inaccuracies.
Referenced by Ogre::VectorBase< 3, Real >::getRotationTo(), and Ogre::Matrix3::hasScale().
Build a reflection matrix for the passed in plane.
|
static |
Generates a value based on the Gaussian (normal) distribution function with the given offset and scale parameters.
Clamp a value within an inclusive range.
|
static |
This creates a view matrix.
[ Lx Uy Dz Tx ] [ Lx Uy Dz Ty ] [ Lx Uy Dz Tz ] [ 0 0 0 1 ]
Where T = -(Transposed(Rot) * Pos)
|
static |
This creates 'uniform' perspective projection matrix, which depth range [-1,1], right-handed rules.
[ A 0 C 0 ] [ 0 B D 0 ] [ 0 0 q qn ] [ 0 0 -1 0 ]
A = 2 * near / (right - left) B = 2 * near / (top - bottom) C = (right + left) / (right - left) D = (top + bottom) / (top - bottom) q = - (far + near) / (far - near) qn = - 2 * (far * near) / (far - near)
|
static |
Get the radius of the origin-centered bounding sphere from the bounding box.
|
static |
Get the radius of the bbox-centered bounding sphere from the bounding box.
|
staticconstexpr |
Stored value of log(2) for frequent use.
|
staticconstexpr |
Referenced by Ogre::VectorBase< 2, Real >::angleTo(), and Ogre::VectorBase< 3, Real >::randomDeviant().