📄 d3dx9math.inl
字号:
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx9math.inl
// Content: D3DX math inline functions
//
//////////////////////////////////////////////////////////////////////////////
#ifndef __D3DX9MATH_INL__
#define __D3DX9MATH_INL__
//===========================================================================
//
// Inline Class Methods
//
//===========================================================================
#ifdef __cplusplus
//--------------------------
// Float16
//--------------------------
D3DXINLINE
D3DXFLOAT16::D3DXFLOAT16( FLOAT f )
{
D3DXFloat32To16Array(this, &f, 1);
}
D3DXINLINE
D3DXFLOAT16::D3DXFLOAT16( CONST D3DXFLOAT16& f )
{
value = f.value;
}
// casting
D3DXINLINE
D3DXFLOAT16::operator FLOAT ()
{
FLOAT f;
D3DXFloat16To32Array(&f, this, 1);
return f;
}
// binary operators
D3DXINLINE BOOL
D3DXFLOAT16::operator == ( CONST D3DXFLOAT16& f ) const
{
return value == f.value;
}
D3DXINLINE BOOL
D3DXFLOAT16::operator != ( CONST D3DXFLOAT16& f ) const
{
return value != f.value;
}
//--------------------------
// 2D Vector
//--------------------------
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
x = pf[0];
y = pf[1];
}
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat16To32Array(&x, pf, 2);
}
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( FLOAT fx, FLOAT fy )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
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;
}
//--------------------------
// 2D Vector (16 bit)
//--------------------------
D3DXINLINE
D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat32To16Array(&x, pf, 2);
}
D3DXINLINE
D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
*((DWORD *) &x) = *((DWORD *) &pf[0]);
}
D3DXINLINE
D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy )
{
x = fx;
y = fy;
}
// casting
D3DXINLINE
D3DXVECTOR2_16F::operator D3DXFLOAT16* ()
{
return (D3DXFLOAT16*) &x;
}
D3DXINLINE
D3DXVECTOR2_16F::operator CONST D3DXFLOAT16* () const
{
return (CONST D3DXFLOAT16*) &x;
}
// binary operators
D3DXINLINE BOOL
D3DXVECTOR2_16F::operator == ( CONST D3DXVECTOR2_16F &v ) const
{
return *((DWORD *) &x) == *((DWORD *) &v.x);
}
D3DXINLINE BOOL
D3DXVECTOR2_16F::operator != ( CONST D3DXVECTOR2_16F &v ) const
{
return *((DWORD *) &x) != *((DWORD *) &v.x);
}
//--------------------------
// 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( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat16To32Array(&x, pf, 3);
}
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;
}
//--------------------------
// 3D Vector (16 bit)
//--------------------------
D3DXINLINE
D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat32To16Array(&x, pf, 3);
}
D3DXINLINE
D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DVECTOR& v )
{
D3DXFloat32To16Array(&x, &v.x, 1);
D3DXFloat32To16Array(&y, &v.y, 1);
D3DXFloat32To16Array(&z, &v.z, 1);
}
D3DXINLINE
D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
*((DWORD *) &x) = *((DWORD *) &pf[0]);
*((WORD *) &z) = *((WORD *) &pf[2]);
}
D3DXINLINE
D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy, CONST D3DXFLOAT16 &fz )
{
x = fx;
y = fy;
z = fz;
}
// casting
D3DXINLINE
D3DXVECTOR3_16F::operator D3DXFLOAT16* ()
{
return (D3DXFLOAT16*) &x;
}
D3DXINLINE
D3DXVECTOR3_16F::operator CONST D3DXFLOAT16* () const
{
return (CONST D3DXFLOAT16*) &x;
}
// binary operators
D3DXINLINE BOOL
D3DXVECTOR3_16F::operator == ( CONST D3DXVECTOR3_16F &v ) const
{
return *((DWORD *) &x) == *((DWORD *) &v.x) &&
*((WORD *) &z) == *((WORD *) &v.z);
}
D3DXINLINE BOOL
D3DXVECTOR3_16F::operator != ( CONST D3DXVECTOR3_16F &v ) const
{
return *((DWORD *) &x) != *((DWORD *) &v.x) ||
*((WORD *) &z) != *((WORD *) &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( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat16To32Array(&x, pf, 4);
}
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;
}
//--------------------------
// 4D Vector (16 bit)
//--------------------------
D3DXINLINE
D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat32To16Array(&x, pf, 4);
}
D3DXINLINE
D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
*((DWORD *) &x) = *((DWORD *) &pf[0]);
*((DWORD *) &z) = *((DWORD *) &pf[2]);
}
D3DXINLINE
D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy, CONST D3DXFLOAT16 &fz, CONST D3DXFLOAT16 &fw )
{
x = fx;
y = fy;
z = fz;
w = fw;
}
// casting
D3DXINLINE
D3DXVECTOR4_16F::operator D3DXFLOAT16* ()
{
return (D3DXFLOAT16*) &x;
}
D3DXINLINE
D3DXVECTOR4_16F::operator CONST D3DXFLOAT16* () const
{
return (CONST D3DXFLOAT16*) &x;
}
// binary operators
D3DXINLINE BOOL
D3DXVECTOR4_16F::operator == ( CONST D3DXVECTOR4_16F &v ) const
{
return *((DWORD *) &x) == *((DWORD *) &v.x) &&
*((DWORD *) &z) == *((DWORD *) &v.z);
}
D3DXINLINE BOOL
D3DXVECTOR4_16F::operator != ( CONST D3DXVECTOR4_16F &v ) const
{
return *((DWORD *) &x) != *((DWORD *) &v.x) ||
*((DWORD *) &z) != *((DWORD *) &v.z);
}
//--------------------------
// Matrix
//--------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -