Data Structures | Functions
AtVector API

Data Structures

struct  AtPoint
 3D point (single precision) More...
 
struct  AtPoint2
 2D point More...
 
struct  AtHPoint
 Homogeneous point. More...
 

Functions

AtPoint operator* (float f, const AtPoint &p)
 
AtPoint operator+ (float f, const AtPoint &p)
 
AtPoint operator- (float f, const AtPoint &p)
 
AtPoint2 operator* (float f, const AtPoint2 &p)
 
AtPoint2 operator+ (float f, const AtPoint2 &p)
 
AtPoint2 operator- (float f, const AtPoint2 &p)
 

Derived Typedefs

typedef AtPoint AtVector
 3D vector (single precision)
 
typedef AtPoint2 AtVector2
 2D vector
 

Vector Components

#define AI_X   0
 X component.
 
#define AI_Y   1
 Y component.
 
#define AI_Z   2
 Z component.
 

2D Vector Operations

void AiV2Create (AtVector2 &vout, float x, float y)
 Create a 2D vector: vout = (x, y)
 
float AiV2Dot (const AtVector2 &v1, const AtVector2 &v2)
 Dot product: <v1, v2>
 
float AiV2Length (const AtVector2 &v1)
 Vector Length: ||v1||.
 
float AiV2Dist (const AtPoint2 &p1, const AtPoint2 &p2)
 Distance between two points: ||p1-p2||.
 
AtVector2 AiV2Lerp (float t, const AtVector2 &lo, const AtVector2 &hi)
 2D vector linear interpolation (t=0 -> result=lo, t=1 -> result=hi)
 
AtVector2 AiV2Clamp (const AtVector2 &in, float lo, float hi)
 Clamp each vector coordinate to the range [lo,hi].
 

3D Vector Operations

float AiV3Length (const AtVector &a)
 Vector Length: ||a||.
 
float AiV3Dot (const AtVector &a, const AtVector &b)
 Dot product: <a, b>
 
float AiV3Dist (const AtVector &a, const AtVector &b)
 Distance between two points: ||a-b||.
 
float AiV3Dist2 (const AtVector &a, const AtVector &b)
 Squared distance between two points: ||a-b||^2.
 
float AiV3DistPlane (const AtPoint &x, const AtPoint &p, const AtVector &n)
 Signed distance between point x and a plane defined by point p and normalized vector n.
 
AtVector AiV3Cross (const AtVector &a, const AtVector &b)
 Cross product: a x b.
 
AtVector AiV3Normalize (const AtVector &a)
 Normalize a vector: a / ||a||.
 
AtVector AiV3Lerp (float t, const AtVector &lo, const AtVector &hi)
 3D vector linear interpolation (t=0 -> result=lo, t=1 -> result=hi)
 
AtVector AiV3Clamp (const AtVector &in, float lo, float hi)
 Clamp each vector coordinate to the range [lo,hi].
 
AtVector AiV3Min (const AtVector &a, const AtVector &b)
 Minimum of two vectors, component-wise.
 
AtVector AiV3Max (const AtVector &a, const AtVector &b)
 Maximum of two vectors, component-wise.
 
AtVector ABS (const AtVector &a)
 Absolute value of each component.
 
AtVector AiBerpXYZ (float a, float b, const AtVector &p0, const AtVector &p1, const AtVector &p2)
 Barycentric interpolation of a point inside a triangle.
 
AI_API bool AiV3Exists (const AtVector &a)
 Check whether a vector has all valid components (not NaN and not infinite)
 
bool AiV3Equal (const AtVector &a, const AtVector &b)
 Vector equality: a == b.
 
bool AiV3IsSmall (const AtVector &a, float epsilon=AI_EPSILON)
 Check for a zero vector, within a small tolerance: ||a|| < epsilon.
 
bool AiV3IsZero (const AtVector &a)
 Check for a zero vector: ||a|| == 0.
 
void AiV3RotateToFrame (AtVector &a, const AtVector &u, const AtVector &v, const AtVector &w)
 Rotate vector a so that it aligns with frame {u,v,w}.
 
void AiBerpUV (float a, float b, float u0, float v0, float u1, float v1, float u2, float v2, float *u, float *v)
 Barycentric interpolation of UV coordinates inside a 3D triangle.
 

4D Vector Operations

void AiV4Create (AtHPoint &vout, float x, float y, float z, float w)
 Create a 4D vector: pout = (x, y, z, w)
 
void AiV4CreatePoint (AtHPoint &pout, const AtVector &v)
 Create a 4D point: pout = (v.x, v.y, v.z, 1)
 
void AiV4CreateVector (AtHPoint &vout, const AtVector &v)
 Create a 4D vector: vout = (v.x, v.y, v.z, 0)
 
void AiV4Add (AtHPoint &vout, const AtHPoint &v1, const AtHPoint &v2)
 Add two vectors: vout = v1 + v2.
 
void AiV4Sub (AtHPoint &vout, const AtHPoint &v1, const AtHPoint &v2)
 Substract two vectors: vout = v1 - v2.
 
void AiV4Scale (AtHPoint &vout, const AtHPoint &vin, float k)
 Scale a vector by a constant: vout = vin * k.
 
void AiV4Neg (AtHPoint &vout, const AtHPoint &vin)
 Negate a vector: vout = -vin.
 
void AiV4Project (AtVector &vout, const AtHPoint &vin)
 Project a homogeneous vector back into 3d: vout = vin.w != 0 ? vin * (1 / vin.w) : (0,0,0)
 

Deprecated

void AiV2Add (AtVector2 &out, const AtVector2 &v1, const AtVector2 &v2)
 
void AiV2Sub (AtVector2 &out, const AtVector2 &v1, const AtVector2 &v2)
 
void AiV2Scale (AtVector2 &out, const AtVector2 &v1, float k)
 
void AiV2Lerp (AtVector2 &out, float t, const AtVector2 &lo, const AtVector2 &hi)
 
void AiV2Clamp (AtVector2 &out, const AtVector2 &in, float lo, float hi)
 
void AiV3Cross (AtVector &out, const AtVector &a, const AtVector &b)
 
void AiV3Normalize (AtVector &out, const AtVector &in)
 
void AiV3Lerp (AtVector &out, float t, const AtVector &lo, const AtVector &hi)
 
void AiV3Min (AtVector &out, const AtVector &a, const AtVector &b)
 
void AiV3Max (AtVector &out, const AtVector &a, const AtVector &b)
 
void AiV3Clamp (AtVector &out, const AtVector &in, float lo, float hi)
 
void AiBerpXYZ (float a, float b, const AtVector &p0, const AtVector &p1, const AtVector &p2, AtVector &out)
 
void AiV3Create (AtVector &vout, float x, float y, float z)
 
void AiV3Copy (AtVector &vout, const AtVector &vin)
 
void AiV3Add (AtVector &vout, const AtVector &v1, const AtVector &v2)
 
void AiV3Sub (AtVector &vout, const AtVector &v1, const AtVector &v2)
 
void AiV3AddScalar (AtVector &vout, const AtVector &vin, float k)
 
void AiV3SubScalar (AtVector &vout, const AtVector &vin, float k)
 
void AiV3Scale (AtVector &vout, const AtVector &vin, float k)
 
void AiV3Neg (AtVector &vout, const AtVector &vin)
 
void AiV3Invert (AtVector &vout, const AtVector &vin)
 
void AiV3Mult (AtVector &vout, const AtVector &v1, const AtVector &v2)
 
void AiV3Div (AtVector &vout, const AtVector &v1, const AtVector &v2)
 
void AiV3Midpoint (AtPoint &pout, const AtVector &v1, const AtVector &v2)
 
void AiV3ProjectPointOnLine (AtPoint &pout, const AtPoint &o, const AtVector &dir, const AtPoint &p)
 
void AiV3RayPoint (AtPoint &pout, const AtPoint &origin, const AtVector &dir, double t)
 
#define AiV3isZero   AiV3IsSmall
 

Constants

AI_API AtPoint AI_P3_ZERO
 
AI_API AtVector AI_V3_ZERO
 
AI_API AtVector AI_V3_HALF
 
AI_API AtVector AI_V3_ONE
 
AI_API AtVector AI_V3_X
 
AI_API AtVector AI_V3_Y
 
AI_API AtVector AI_V3_Z
 
AI_API AtVector AI_V3_NEGX
 
AI_API AtVector AI_V3_NEGY
 
AI_API AtVector AI_V3_NEGZ
 
AI_API AtPoint2 AI_P2_ZERO
 
AI_API AtPoint2 AI_P2_ONE
 

Detailed Description

This module contains vector math types and vector utilities. There are two equivalent definitions of the basic 3D vector type (AtPoint, and AtVector).


© 2009-2013 Solid Angle SL · all rights reserved · www.solidangle.com