Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef CVec3_h
- #define CVec3_h
- #include <cmath>
- class CVec3
- {
- public:
- // Data
- float x, y, z;
- // Ctors
- CVec3( float InX, float InY, float InZ ) : x( InX ), y( InY ), z( InZ )
- {
- }
- CVec3( ) : x(0), y(0), z(0)
- {
- }
- // Operator Overloads
- inline bool operator== (const CVec3& V2) const
- {
- return (x == V2.x && y == V2.y && z == V2.z);
- }
- inline CVec3 operator+ (const CVec3& V2) const
- {
- return CVec3( x + V2.x, y + V2.y, z + V2.z);
- }
- inline CVec3 operator- (const CVec3& V2) const
- {
- return CVec3( x - V2.x, y - V2.y, z - V2.z);
- }
- inline CVec3 operator- ( ) const
- {
- return CVec3(-x, -y, -z);
- }
- inline CVec3 operator/ (float S ) const
- {
- float fInv = 1.0f / S;
- return CVec3 (x * fInv , y * fInv, z * fInv);
- }
- inline CVec3 operator/ (const CVec3& V2) const
- {
- return CVec3 (x / V2.x, y / V2.y, z / V2.z);
- }
- inline CVec3 operator* (const CVec3& V2) const
- {
- return CVec3 (x * V2.x, y * V2.y, z * V2.z);
- }
- inline CVec3 operator* (float S) const
- {
- return CVec3 (x * S, y * S, z * S);
- }
- inline void operator+= ( const CVec3& V2 )
- {
- x += V2.x;
- y += V2.y;
- z += V2.z;
- }
- inline void operator-= ( const CVec3& V2 )
- {
- x -= V2.x;
- y -= V2.y;
- z -= V2.z;
- }
- inline float operator[] ( int i )
- {
- if ( i == 0 ) return x;
- else if ( i == 1 ) return y;
- else return z;
- }
- // Functions
- inline float Dot( const CVec3 &V1 ) const
- {
- return V1.x*x + V1.y*y + V1.z*z;
- }
- inline CVec3 CrossProduct( const CVec3 &V2 ) const
- {
- return CVec3(
- y * V2.z - z * V2.y,
- z * V2.x - x * V2.z,
- x * V2.y - y * V2.x );
- }
- // Return vector rotated by the 3x3 portion of matrix m
- // (provided because it's used by bbox.cpp in article 21)
- CVec3 RotByMatrix( const float m[16] ) const
- {
- return CVec3(
- x*m[0] + y*m[4] + z*m[8],
- x*m[1] + y*m[5] + z*m[9],
- x*m[2] + y*m[6] + z*m[10] );
- }
- // These require math.h for the sqrtf function
- float Magnitude( ) const
- {
- return sqrtf( x*x + y*y + z*z );
- }
- float Distance( const CVec3 &V1 ) const
- {
- return ( *this - V1 ).Magnitude();
- }
- inline void Normalize()
- {
- float fMag = ( x*x + y*y + z*z );
- if (fMag == 0) {return;}
- float fMult = 1.0f/sqrtf(fMag);
- x *= fMult;
- y *= fMult;
- z *= fMult;
- return;
- }
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement