82 lines
3.6 KiB
C++
82 lines
3.6 KiB
C++
#pragma once
|
|
|
|
#include "platform.h"
|
|
#include "types.h"
|
|
|
|
namespace stingray_plugin_foundation {
|
|
|
|
// Operators
|
|
__forceinline Vector3 operator / (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline Vector3 operator * (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline Vector3 operator + (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline Vector3 operator - (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline void operator /= (Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline void operator *= (Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline void operator += (Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline void operator -= (Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline Vector3 operator - (const Vector3 &v);
|
|
__forceinline Vector3 operator + (const Vector3 &v);
|
|
|
|
__forceinline Vector3 operator / (const Vector3 &lhs, float rhs);
|
|
__forceinline Vector3 operator * (const Vector3 &lhs, float rhs);
|
|
__forceinline Vector3 operator * (float lhs, const Vector3 &rhs);
|
|
__forceinline Vector3 operator + (const Vector3 &lhs, float rhs);
|
|
__forceinline Vector3 operator - (const Vector3 &lhs, float rhs);
|
|
__forceinline void operator /= (Vector3 &lhs, float rhs);
|
|
__forceinline void operator *= (Vector3 &lhs, float rhs);
|
|
__forceinline void operator += (Vector3 &lhs, float rhs);
|
|
__forceinline void operator -= (Vector3 &lhs, float rhs);
|
|
|
|
__forceinline bool operator==(const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline bool operator!=(const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline bool operator< (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline bool operator<=(const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline bool operator> (const Vector3 &lhs, const Vector3 &rhs);
|
|
__forceinline bool operator>=(const Vector3 &lhs, const Vector3 &rhs);
|
|
|
|
// Methods
|
|
__forceinline Vector3 vector3(float x, float y, float z);
|
|
__forceinline Vector3 vector3(const float v[3]);
|
|
__forceinline Vector3 vector3(const Vector2 &v);
|
|
__forceinline Vector3 vector3_base(int i);
|
|
__forceinline float & element(Vector3 &m, int i);
|
|
__forceinline const float & element(const Vector3 &m, int i);
|
|
|
|
__forceinline bool all_gt(const Vector3& p1, const Vector3& p2);
|
|
__forceinline bool all_lt(const Vector3& p1, const Vector3& p2);
|
|
__forceinline void zero(Vector3 &v);
|
|
__forceinline bool is_zero(const Vector3 &v);
|
|
__forceinline bool is_zero(const Vector3 &v, float eps);
|
|
__forceinline float length(const Vector3 &v);
|
|
__forceinline float length_squared(const Vector3 &v);
|
|
__forceinline float norm(const Vector3 &v);
|
|
__forceinline float one_norm(const Vector3 &v);
|
|
__forceinline float infinity_norm(const Vector3 &v);
|
|
__forceinline Vector3 normalize(const Vector3 &v);
|
|
__forceinline float dot(const Vector3 &v0, const Vector3 &v1);
|
|
__forceinline Vector3 cross(const Vector3 &v0, const Vector3 &v1);
|
|
__forceinline float distance(const Vector3 &v0, const Vector3 &v1);
|
|
__forceinline float distance_squared(const Vector3 &v0, const Vector3 &v1);
|
|
__forceinline Vector3 normal_vector(const Vector3 &v0,const Vector3 &v1, const Vector3& v2);
|
|
__forceinline Vector3 min(const Vector3 &v0, const Vector3 &v1);
|
|
__forceinline Vector3 max(const Vector3 &v0, const Vector3 &v1);
|
|
|
|
// Makes v orthonormal with respect to ref and returns the result.
|
|
__forceinline Vector3 orthonormalize(const Vector3 &v, const Vector3 &ref);
|
|
|
|
// Given unit vector x finds two other axes y and z so that an orthonormal coordinate
|
|
// system is formed.
|
|
__forceinline void make_axes(const Vector3 &x, Vector3 &y, Vector3 &z);
|
|
|
|
__forceinline Vector3 lerp(const Vector3 &a, const Vector3 &b, float t);
|
|
|
|
struct MagnitudeAndDirection
|
|
{
|
|
float magnitude;
|
|
Vector3 direction;
|
|
};
|
|
__forceinline MagnitudeAndDirection magnitude_and_direction(const Vector3 &v);
|
|
|
|
}
|
|
|
|
#include "vector3.inl"
|