rem 3DMaths Functionality

rem Indexes for vectors
Vector2Number=1
Vector3Number=2
Vector4Number=3
Vector3Eye=4
Vector3At=5
Vector3Up=6

rem Indexes for matrices
Matrix4Number=7
Matrix4Projection=8
Matrix4View=9
Matrix4World=10

rem Standard values
Width as float=0.0+rnd(100)
Height as float=0.0+rnd(100)
Near as float=rnd(100)/100.0
Far as float=rnd(100)/100.0
FOV as float=0.0+rnd(90)
Aspect as float=rnd(100)/100.0
PlaneA as float=rnd(100)/100.0
PlaneB as float=rnd(100)/100.0
PlaneC as float=rnd(100)/100.0
PlaneD as float=rnd(100)/100.0
Angle as float=0.0+rnd(359)
Value as float=0.0+rnd(100)
FValue as float=0.0+rnd(100)
GValue as float=0.0+rnd(100)
SValue as float=0.0+rnd(100)
X as float=rnd(200)-100.0
Y as float=rnd(200)-100.0
Z as float=rnd(200)-100.0
W as float=rnd(100)/100.0
Yaw as float=0.0+rnd(359)
Pitch as float=0.0+rnd(359)
Roll as float=0.0+rnd(359)

rem Create math vectors
ReturnFlag = make vector2(Vector2Number)
ReturnFlag = make vector3(Vector3Number)
ReturnFlag = make vector4(Vector4Number)
ReturnFlag = make vector3(Vector3Eye)
ReturnFlag = make vector3(Vector3At)
ReturnFlag = make vector3(Vector3Up)

rem Create math matrix
ReturnFlag = make matrix4(Matrix4Number)

rem Create projection, view and world matrices
ReturnFlag = make matrix4(Matrix4Projection)
PROJECTION MATRIX4 Matrix4Projection
ReturnFlag = make matrix4(Matrix4View)
VIEW MATRIX4 Matrix4View
ReturnFlag = make matrix4(Matrix4World)
WORLD MATRIX4 Matrix4World

rem All maths for Vector2
Vector=Vector2Number
VectorA=Vector2Number
VectorB=Vector2Number
VectorC=Vector2Number
VectorD=Vector2Number
VectorResult=Vector2Number
VectorSource=Vector2Number
Matrix4Source=Matrix4Number

ADD VECTOR2 VectorResult, VectorA, VectorB
CATMULLROM VECTOR2 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
COPY VECTOR2 VectorResult, VectorSource
DIVIDE VECTOR2 VectorResult, Value
ReturnFloat = DOT PRODUCT VECTOR2(VectorA, VectorB)
BCC VECTOR2 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
ReturnFloat = CCW VECTOR2(VectorA, VectorB)
ReturnFloat = SQUARED LENGTH VECTOR2(Vector)
ReturnFloat = LENGTH VECTOR2(Vector)
ReturnFloat = X VECTOR2(Vector)
ReturnFloat = Y VECTOR2(Vector)
HERMITE VECTOR2 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
ReturnFlag = IS EQUAL VECTOR2(VectorA, VectorB)
LINEAR INTERPOLATE VECTOR2 VectorResult, VectorA, VectorB, SValue
MAXIMIZE VECTOR2 VectorResult, VectorA, VectorB
MINIMIZE VECTOR2 VectorResult, VectorA, VectorB
MULTIPLY VECTOR2 VectorResult, Value
NORMALIZE VECTOR2 VectorResult, VectorSource
SCALE VECTOR2 VectorResult, VectorSource, Value
SET VECTOR2 VectorResult, X, Y
SUBTRACT VECTOR2 VectorResult, VectorA, VectorB
TRANSFORM COORDS VECTOR2 VectorResult, VectorSource, Matrix4Source

rem All maths for Vector3
Vector=Vector3Number
VectorA=Vector3Number
VectorB=Vector3Number
VectorC=Vector3Number
VectorD=Vector3Number
VectorResult=Vector3Number
VectorSource=Vector3Number

ADD VECTOR3 VectorResult, VectorA, VectorB
CATMULLROM VECTOR3 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
COPY VECTOR3 VectorResult, VectorSource
CROSS PRODUCT VECTOR3 VectorResult, VectorA, VectorB
DIVIDE VECTOR3 VectorResult, Value
ReturnFloat = DOT PRODUCT VECTOR3(VectorA, VectorB)
BCC VECTOR3 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
ReturnFloat = SQUARED LENGTH VECTOR3(Vector)
ReturnFloat = LENGTH VECTOR3(Vector)
ReturnFloat = X VECTOR3(Vector)
ReturnFloat = Y VECTOR3(Vector)
ReturnFloat = Z VECTOR3(Vector)
HERMITE VECTOR3 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
ReturnFlag = IS EQUAL VECTOR3(VectorA, VectorB)
LINEAR INTERPOLATE VECTOR3 VectorResult, VectorA, VectorB, SValue
MAXIMIZE VECTOR3 VectorResult, VectorA, VectorB
MINIMIZE VECTOR3 VectorResult, VectorA, VectorB
MULTIPLY VECTOR3 VectorResult, Value
NORMALIZE VECTOR3 VectorResult, VectorSource
PROJECT VECTOR3 VectorResult, VectorSource, Matrix4Projection, Matrix4View, Matrix4World
SCALE VECTOR3 VectorResult, VectorSource, Value
SET VECTOR3 VectorResult, X, Y, Z
SUBTRACT VECTOR3 VectorResult, VectorA, VectorB
TRANSFORM COORDS VECTOR3 VectorResult, VectorSource, Matrix4Source
TRANSFORM NORMALS VECTOR3 VectorResult, VectorSource, Matrix4Source

rem All maths for Vector4
Vector=Vector4Number
VectorA=Vector4Number
VectorB=Vector4Number
VectorC=Vector4Number
VectorD=Vector4Number
VectorResult=Vector4Number
VectorSource=Vector4Number

ADD VECTOR4 VectorResult, VectorA, VectorB
CATMULLROM VECTOR4 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
COPY VECTOR4 VectorResult, VectorSource
DIVIDE VECTOR4 VectorResult, Value
BCC VECTOR4 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
ReturnFloat = SQUARED LENGTH VECTOR4(Vector)
ReturnFloat = LENGTH VECTOR4(Vector)
ReturnFloat = X VECTOR4(Vector)
ReturnFloat = Y VECTOR4(Vector)
ReturnFloat = Z VECTOR4(Vector)
ReturnFloat = W VECTOR4(Vector)
HERMITE VECTOR4 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
ReturnFlag = IS EQUAL VECTOR4(VectorA, VectorB)
LINEAR INTERPOLATE VECTOR4 VectorResult, VectorA, VectorB, SValue
MAXIMIZE VECTOR4 VectorResult, VectorA, VectorB
MINIMIZE VECTOR4 VectorResult, VectorA, VectorB
MULTIPLY VECTOR4 VectorResult, Value
NORMALIZE VECTOR4 VectorResult, VectorSource
SCALE VECTOR4 VectorResult, VectorSource, Value
SET VECTOR4 VectorResult, X, Y, Z, W
SUBTRACT VECTOR4 VectorResult, VectorA, VectorB
TRANSFORM VECTOR4 VectorResult, VectorSource, Matrix4Source
TRANSFORM NORMALS VECTOR3 VectorResult, VectorSource, Matrix4Source

rem All maths for Matrix4
Matrix4Result=Matrix4Number
Matrix4A=Matrix4Number
Matrix4B=Matrix4Number
Matrix4=Matrix4Number
Vector3Axis=Vector3Number

ADD MATRIX4 Matrix4Result, Matrix4A, Matrix4B
BUILD LOOKAT LHMATRIX4 Matrix4Result, Vector3Eye, Vector3At, Vector3Up
BUILD LOOKAT RHMATRIX4 Matrix4Result, Vector3Eye, Vector3At, Vector3Up
BUILD ORTHO LHMATRIX4 Matrix4Result, Width, Height, Near, Far
BUILD ORTHO RHMATRIX4 Matrix4Result, Width, Height, Near, Far
BUILD FOV LHMATRIX4 Matrix4Result, FOV, Aspect, Near, Far
BUILD FOV RHMATRIX4 Matrix4Result, FOV, Aspect, Near, Far
BUILD PERSPECTIVE LHMATRIX4 Matrix4Result, Width, Height, Near, Far
BUILD PERSPECTIVE RHMATRIX4 Matrix4Result, Width, Height, Near, Far
BUILD REFLECTION MATRIX4 Matrix4Result, PlaneA, PlaneB, PlaneC, PlaneD
BUILD ROTATION AXIS MATRIX4 Matrix4Result, Vector3Axis, Angle
COPY MATRIX4 Matrix4Result, Matrix4Source
DIVIDE MATRIX4 Matrix4Result, Value
ReturnFloat = INVERSE MATRIX4(Matrix4Result, Matrix4Source)
ReturnFlag = IS EQUAL MATRIX4(Matrix4A, Matrix4B)
ReturnFlag = IS IDENTITY MATRIX4(Matrix4Result)
MULTIPLY MATRIX4 Matrix4Result, Matrix4A, Matrix4B
MULTIPLY MATRIX4 Matrix4Result, Value
ROTATE X MATRIX4 Matrix4Result, Angle
ROTATE Y MATRIX4 Matrix4Result, Angle
ROTATE YPR MATRIX4 Matrix4Result, Yaw, Pitch, Roll
ROTATE Z MATRIX4 Matrix4Result, Angle
SCALE MATRIX4 Matrix4Result, X, Y, Z
SET IDENTITY MATRIX4 Matrix4Result
SUBTRACT MATRIX4 Matrix4Result, Matrix4A, Matrix4B
TRANSLATE MATRIX4 Matrix4Result, X, Y, Z
TRANSPOSE MATRIX4 Matrix4Result, Matrix4Source

rem Delete vectors and matrix
ReturnFlag = delete vector2(Vector2Number)
ReturnFlag = delete vector3(Vector3Number)
ReturnFlag = delete vector4(Vector4Number)
ReturnFlag = delete vector3(Vector3Eye)
ReturnFlag = delete vector3(Vector3At)
ReturnFlag = delete vector3(Vector3Up)
ReturnFlag = delete matrix4(Matrix4Number)
ReturnFlag = delete matrix4(Matrix4Projection)
ReturnFlag = delete matrix4(Matrix4View)
ReturnFlag = delete matrix4(Matrix4World)

rem End program
end