📄 d3dx8math.inl
字号:
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx8math.inl
// Content: D3DX math inline functions
//
//////////////////////////////////////////////////////////////////////////////
#ifndef __D3DX8MATH_INL__
#define __D3DX8MATH_INL__
//===========================================================================
//
// Inline Class Methods
//
//===========================================================================
#ifdef __cplusplus
//--------------------------
// 2D Vector
//--------------------------
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
x = pf[0];
y = pf[1];
}
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( FLOAT fx, FLOAT fy )
{
x = fx;
y = fy;
}
// casting
D3DXINLINE
D3DXVECTOR2::operator FLOAT* ()
{
return (FLOAT *) &x;
}
D3DXINLINE
D3DXVECTOR2::operator CONST FLOAT* () const
{
return (CONST FLOAT *) &x;
}
// assignment operators
D3DXINLINE D3DXVECTOR2&
D3DXVECTOR2::operator += ( CONST D3DXVECTOR2& v )
{
x += v.x;
y += v.y;
return *this;
}
D3DXINLINE D3DXVECTOR2&
D3DXVECTOR2::operator -= ( CONST D3DXVECTOR2& v )
{
x -= v.x;
y -= v.y;
return *this;
}
D3DXINLINE D3DXVECTOR2&
D3DXVECTOR2::operator *= ( FLOAT f )
{
x *= f;
y *= f;
return *this;
}
D3DXINLINE D3DXVECTOR2&
D3DXVECTOR2::operator /= ( FLOAT f )
{
FLOAT fInv = 1.0f / f;
x *= fInv;
y *= fInv;
return *this;
}
// unary operators
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator + () const
{
return *this;
}
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator - () const
{
return D3DXVECTOR2(-x, -y);
}
// binary operators
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator + ( CONST D3DXVECTOR2& v ) const
{
return D3DXVECTOR2(x + v.x, y + v.y);
}
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator - ( CONST D3DXVECTOR2& v ) const
{
return D3DXVECTOR2(x - v.x, y - v.y);
}
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator * ( FLOAT f ) const
{
return D3DXVECTOR2(x * f, y * f);
}
D3DXINLINE D3DXVECTOR2
D3DXVECTOR2::operator / ( FLOAT f ) const
{
FLOAT fInv = 1.0f / f;
return D3DXVECTOR2(x * fInv, y * fInv);
}
D3DXINLINE D3DXVECTOR2
operator * ( FLOAT f, CONST D3DXVECTOR2& v )
{
return D3DXVECTOR2(f * v.x, f * v.y);
}
D3DXINLINE BOOL
D3DXVECTOR2::operator == ( CONST D3DXVECTOR2& v ) const
{
return x == v.x && y == v.y;
}
D3DXINLINE BOOL
D3DXVECTOR2::operator != ( CONST D3DXVECTOR2& v ) const
{
return x != v.x || y != v.y;
}
//--------------------------
// 3D Vector
//--------------------------
D3DXINLINE
D3DXVECTOR3::D3DXVECTOR3( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
x = pf[0];
y = pf[1];
z = pf[2];
}
D3DXINLINE
D3DXVECTOR3::D3DXVECTOR3( CONST D3DVECTOR& v )
{
x = v.x;
y = v.y;
z = v.z;
}
D3DXINLINE
D3DXVECTOR3::D3DXVECTOR3( FLOAT fx, FLOAT fy, FLOAT fz )
{
x = fx;
y = fy;
z = fz;
}
// casting
D3DXINLINE
D3DXVECTOR3::operator FLOAT* ()
{
return (FLOAT *) &x;
}
D3DXINLINE
D3DXVECTOR3::operator CONST FLOAT* () const
{
return (CONST FLOAT *) &x;
}
// assignment operators
D3DXINLINE D3DXVECTOR3&
D3DXVECTOR3::operator += ( CONST D3DXVECTOR3& v )
{
x += v.x;
y += v.y;
z += v.z;
return *this;
}
D3DXINLINE D3DXVECTOR3&
D3DXVECTOR3::operator -= ( CONST D3DXVECTOR3& v )
{
x -= v.x;
y -= v.y;
z -= v.z;
return *this;
}
D3DXINLINE D3DXVECTOR3&
D3DXVECTOR3::operator *= ( FLOAT f )
{
x *= f;
y *= f;
z *= f;
return *this;
}
D3DXINLINE D3DXVECTOR3&
D3DXVECTOR3::operator /= ( FLOAT f )
{
FLOAT fInv = 1.0f / f;
x *= fInv;
y *= fInv;
z *= fInv;
return *this;
}
// unary operators
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator + () const
{
return *this;
}
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator - () const
{
return D3DXVECTOR3(-x, -y, -z);
}
// binary operators
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator + ( CONST D3DXVECTOR3& v ) const
{
return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);
}
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator - ( CONST D3DXVECTOR3& v ) const
{
return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
}
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator * ( FLOAT f ) const
{
return D3DXVECTOR3(x * f, y * f, z * f);
}
D3DXINLINE D3DXVECTOR3
D3DXVECTOR3::operator / ( FLOAT f ) const
{
FLOAT fInv = 1.0f / f;
return D3DXVECTOR3(x * fInv, y * fInv, z * fInv);
}
D3DXINLINE D3DXVECTOR3
operator * ( FLOAT f, CONST struct D3DXVECTOR3& v )
{
return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);
}
D3DXINLINE BOOL
D3DXVECTOR3::operator == ( CONST D3DXVECTOR3& v ) const
{
return x == v.x && y == v.y && z == v.z;
}
D3DXINLINE BOOL
D3DXVECTOR3::operator != ( CONST D3DXVECTOR3& v ) const
{
return x != v.x || y != v.y || z != v.z;
}
//--------------------------
// 4D Vector
//--------------------------
D3DXINLINE
D3DXVECTOR4::D3DXVECTOR4( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
x = pf[0];
y = pf[1];
z = pf[2];
w = pf[3];
}
D3DXINLINE
D3DXVECTOR4::D3DXVECTOR4( FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw )
{
x = fx;
y = fy;
z = fz;
w = fw;
}
// casting
D3DXINLINE
D3DXVECTOR4::operator FLOAT* ()
{
return (FLOAT *) &x;
}
D3DXINLINE
D3DXVECTOR4::operator CONST FLOAT* () const
{
return (CONST FLOAT *) &x;
}
// assignment operators
D3DXINLINE D3DXVECTOR4&
D3DXVECTOR4::operator += ( CONST D3DXVECTOR4& v )
{
x += v.x;
y += v.y;
z += v.z;
w += v.w;
return *this;
}
D3DXINLINE D3DXVECTOR4&
D3DXVECTOR4::operator -= ( CONST D3DXVECTOR4& v )
{
x -= v.x;
y -= v.y;
z -= v.z;
w -= v.w;
return *this;
}
D3DXINLINE D3DXVECTOR4&
D3DXVECTOR4::operator *= ( FLOAT f )
{
x *= f;
y *= f;
z *= f;
w *= f;
return *this;
}
D3DXINLINE D3DXVECTOR4&
D3DXVECTOR4::operator /= ( FLOAT f )
{
FLOAT fInv = 1.0f / f;
x *= fInv;
y *= fInv;
z *= fInv;
w *= fInv;
return *this;
}
// unary operators
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator + () const
{
return *this;
}
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator - () const
{
return D3DXVECTOR4(-x, -y, -z, -w);
}
// binary operators
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator + ( CONST D3DXVECTOR4& v ) const
{
return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);
}
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator - ( CONST D3DXVECTOR4& v ) const
{
return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);
}
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator * ( FLOAT f ) const
{
return D3DXVECTOR4(x * f, y * f, z * f, w * f);
}
D3DXINLINE D3DXVECTOR4
D3DXVECTOR4::operator / ( FLOAT f ) const
{
FLOAT fInv = 1.0f / f;
return D3DXVECTOR4(x * fInv, y * fInv, z * fInv, w * fInv);
}
D3DXINLINE D3DXVECTOR4
operator * ( FLOAT f, CONST D3DXVECTOR4& v )
{
return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);
}
D3DXINLINE BOOL
D3DXVECTOR4::operator == ( CONST D3DXVECTOR4& v ) const
{
return x == v.x && y == v.y && z == v.z && w == v.w;
}
D3DXINLINE BOOL
D3DXVECTOR4::operator != ( CONST D3DXVECTOR4& v ) const
{
return x != v.x || y != v.y || z != v.z || w != v.w;
}
//--------------------------
// Matrix
//--------------------------
D3DXINLINE
D3DXMATRIX::D3DXMATRIX( CONST FLOAT* pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
memcpy(&_11, pf, sizeof(D3DXMATRIX));
}
D3DXINLINE
D3DXMATRIX::D3DXMATRIX( CONST D3DMATRIX& mat )
{
memcpy(&_11, &mat, sizeof(D3DXMATRIX));
}
D3DXINLINE
D3DXMATRIX::D3DXMATRIX( FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44 )
{
_11 = f11; _12 = f12; _13 = f13; _14 = f14;
_21 = f21; _22 = f22; _23 = f23; _24 = f24;
_31 = f31; _32 = f32; _33 = f33; _34 = f34;
_41 = f41; _42 = f42; _43 = f43; _44 = f44;
}
// access grants
D3DXINLINE FLOAT&
D3DXMATRIX::operator () ( UINT iRow, UINT iCol )
{
return m[iRow][iCol];
}
D3DXINLINE FLOAT
D3DXMATRIX::operator () ( UINT iRow, UINT iCol ) const
{
return m[iRow][iCol];
}
// casting operators
D3DXINLINE
D3DXMATRIX::operator FLOAT* ()
{
return (FLOAT *) &_11;
}
D3DXINLINE
D3DXMATRIX::operator CONST FLOAT* () const
{
return (CONST FLOAT *) &_11;
}
// assignment operators
D3DXINLINE D3DXMATRIX&
D3DXMATRIX::operator *= ( CONST D3DXMATRIX& mat )
{
D3DXMatrixMultiply(this, this, &mat);
return *this;
}
D3DXINLINE D3DXMATRIX&
D3DXMATRIX::operator += ( CONST D3DXMATRIX& mat )
{
_11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
_21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
_31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
_41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
return *this;
}
D3DXINLINE D3DXMATRIX&
D3DXMATRIX::operator -= ( CONST D3DXMATRIX& mat )
{
_11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
_21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
_31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
_41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
return *this;
}
D3DXINLINE D3DXMATRIX&
D3DXMATRIX::operator *= ( FLOAT f )
{
_11 *= f; _12 *= f; _13 *= f; _14 *= f;
_21 *= f; _22 *= f; _23 *= f; _24 *= f;
_31 *= f; _32 *= f; _33 *= f; _34 *= f;
_41 *= f; _42 *= f; _43 *= f; _44 *= f;
return *this;
}
D3DXINLINE D3DXMATRIX&
D3DXMATRIX::operator /= ( FLOAT f )
{
FLOAT fInv = 1.0f / f;
_11 *= fInv; _12 *= fInv; _13 *= fInv; _14 *= fInv;
_21 *= fInv; _22 *= fInv; _23 *= fInv; _24 *= fInv;
_31 *= fInv; _32 *= fInv; _33 *= fInv; _34 *= fInv;
_41 *= fInv; _42 *= fInv; _43 *= fInv; _44 *= fInv;
return *this;
}
// unary operators
D3DXINLINE D3DXMATRIX
D3DXMATRIX::operator + () const
{
return *this;
}
D3DXINLINE D3DXMATRIX
D3DXMATRIX::operator - () const
{
return D3DXMATRIX(-_11, -_12, -_13, -_14,
-_21, -_22, -_23, -_24,
-_31, -_32, -_33, -_34,
-_41, -_42, -_43, -_44);
}
// binary operators
D3DXINLINE D3DXMATRIX
D3DXMATRIX::operator * ( CONST D3DXMATRIX& mat ) const
{
D3DXMATRIX matT;
D3DXMatrixMultiply(&matT, this, &mat);
return matT;
}
D3DXINLINE D3DXMATRIX
D3DXMATRIX::operator + ( CONST D3DXMATRIX& mat ) const
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -