Show / Hide Table of Contents

Struct Vector3

Represents a 3D vector using three single-precision floating-point numbers.

Implements
IEquatable<Vector3>
Inherited Members
Object.Equals(Object, Object)
Object.ReferenceEquals(Object, Object)
Object.GetType()
Namespace: OpenTK
Assembly: OpenTK.dll
Syntax
[Serializable]
public struct Vector3 : IEquatable<Vector3>
Remarks

The Vector3 structure is suitable for interoperation with unmanaged code requiring three consecutive floats.

Constructors

Vector3(Vector2)

Constructs a new Vector3 from the given Vector2.

Declaration
public Vector3(Vector2 v)
Parameters
Type Name Description
Vector2 v

The Vector2 to copy components from.

Vector3(Vector3)

Constructs a new Vector3 from the given Vector3.

Declaration
public Vector3(Vector3 v)
Parameters
Type Name Description
Vector3 v

The Vector3 to copy components from.

Vector3(Vector4)

Constructs a new Vector3 from the given Vector4.

Declaration
public Vector3(Vector4 v)
Parameters
Type Name Description
Vector4 v

The Vector4 to copy components from.

Vector3(Single)

Constructs a new instance.

Declaration
public Vector3(float value)
Parameters
Type Name Description
Single value

The value that will initialize this instance.

Vector3(Single, Single, Single)

Constructs a new Vector3.

Declaration
public Vector3(float x, float y, float z)
Parameters
Type Name Description
Single x

The x component of the Vector3.

Single y

The y component of the Vector3.

Single z

The z component of the Vector3.

Fields

One

Defines an instance with all components set to 1.

Declaration
public static readonly Vector3 One
Field Value
Type Description
Vector3

SizeInBytes

Defines the size of the Vector3 struct in bytes.

Declaration
public static readonly int SizeInBytes
Field Value
Type Description
Int32

UnitX

Defines a unit-length Vector3 that points towards the X-axis.

Declaration
public static readonly Vector3 UnitX
Field Value
Type Description
Vector3

UnitY

Defines a unit-length Vector3 that points towards the Y-axis.

Declaration
public static readonly Vector3 UnitY
Field Value
Type Description
Vector3

UnitZ

Defines a unit-length Vector3 that points towards the Z-axis.

Declaration
public static readonly Vector3 UnitZ
Field Value
Type Description
Vector3

X

The X component of the Vector3.

Declaration
public float X
Field Value
Type Description
Single

Y

The Y component of the Vector3.

Declaration
public float Y
Field Value
Type Description
Single

Z

The Z component of the Vector3.

Declaration
public float Z
Field Value
Type Description
Single

Zero

Defines a zero-length Vector3.

Declaration
public static readonly Vector3 Zero
Field Value
Type Description
Vector3

Properties

Item[Int32]

Gets or sets the value at the index of the Vector.

Declaration
public float this[int index] { get; set; }
Parameters
Type Name Description
Int32 index
Property Value
Type Description
Single

Length

Gets the length (magnitude) of the vector.

Declaration
public readonly float Length { get; }
Property Value
Type Description
Single
See Also
LengthSquared

LengthFast

Gets an approximation of the vector length (magnitude).

Declaration
public readonly float LengthFast { get; }
Property Value
Type Description
Single
Remarks

This property uses an approximation of the square root function to calculate vector magnitude, with an upper error bound of 0.001.

See Also
LengthSquared

LengthSquared

Gets the square of the vector length (magnitude).

Declaration
public readonly float LengthSquared { get; }
Property Value
Type Description
Single
Remarks

This property avoids the costly square root operation required by the Length property. This makes it more suitable for comparisons.

See Also
LengthFast

Xy

Gets or sets an OpenTK.Vector2 with the X and Y components of this instance.

Declaration
public Vector2 Xy { get; set; }
Property Value
Type Description
Vector2

Xz

Gets or sets an OpenTK.Vector2 with the X and Z components of this instance.

Declaration
public Vector2 Xz { get; set; }
Property Value
Type Description
Vector2

Xzy

Gets or sets an OpenTK.Vector3 with the X, Z, and Y components of this instance.

Declaration
public Vector3 Xzy { get; set; }
Property Value
Type Description
Vector3

Yx

Gets or sets an OpenTK.Vector2 with the Y and X components of this instance.

Declaration
public Vector2 Yx { get; set; }
Property Value
Type Description
Vector2

Yxz

Gets or sets an OpenTK.Vector3 with the Y, X, and Z components of this instance.

Declaration
public Vector3 Yxz { get; set; }
Property Value
Type Description
Vector3

Yz

Gets or sets an OpenTK.Vector2 with the Y and Z components of this instance.

Declaration
public Vector2 Yz { get; set; }
Property Value
Type Description
Vector2

Yzx

Gets or sets an OpenTK.Vector3 with the Y, Z, and X components of this instance.

Declaration
public Vector3 Yzx { get; set; }
Property Value
Type Description
Vector3

Zx

Gets or sets an OpenTK.Vector2 with the Z and X components of this instance.

Declaration
public Vector2 Zx { get; set; }
Property Value
Type Description
Vector2

Zxy

Gets or sets an OpenTK.Vector3 with the Z, X, and Y components of this instance.

Declaration
public Vector3 Zxy { get; set; }
Property Value
Type Description
Vector3

Zy

Gets or sets an OpenTK.Vector2 with the Z and Y components of this instance.

Declaration
public Vector2 Zy { get; set; }
Property Value
Type Description
Vector2

Zyx

Gets or sets an OpenTK.Vector3 with the Z, Y, and X components of this instance.

Declaration
public Vector3 Zyx { get; set; }
Property Value
Type Description
Vector3

Methods

Add(Vector3, Vector3)

Adds two vectors.

Declaration
public static Vector3 Add(Vector3 a, Vector3 b)
Parameters
Type Name Description
Vector3 a

Left operand.

Vector3 b

Right operand.

Returns
Type Description
Vector3

Result of operation.

Add(ref Vector3, ref Vector3, out Vector3)

Adds two vectors.

Declaration
public static void Add(ref Vector3 a, ref Vector3 b, out Vector3 result)
Parameters
Type Name Description
Vector3 a

Left operand.

Vector3 b

Right operand.

Vector3 result

Result of operation.

BaryCentric(Vector3, Vector3, Vector3, Single, Single)

Interpolate 3 Vectors using Barycentric coordinates

Declaration
public static Vector3 BaryCentric(Vector3 a, Vector3 b, Vector3 c, float u, float v)
Parameters
Type Name Description
Vector3 a

First input Vector

Vector3 b

Second input Vector

Vector3 c

Third input Vector

Single u

First Barycentric Coordinate

Single v

Second Barycentric Coordinate

Returns
Type Description
Vector3

a when u=v=0, b when u=1,v=0, c when u=0,v=1, and a linear combination of a,b,c otherwise

BaryCentric(ref Vector3, ref Vector3, ref Vector3, Single, Single, out Vector3)

Interpolate 3 Vectors using Barycentric coordinates

Declaration
public static void BaryCentric(ref Vector3 a, ref Vector3 b, ref Vector3 c, float u, float v, out Vector3 result)
Parameters
Type Name Description
Vector3 a

First input Vector.

Vector3 b

Second input Vector.

Vector3 c

Third input Vector.

Single u

First Barycentric Coordinate.

Single v

Second Barycentric Coordinate.

Vector3 result

Output Vector. a when u=v=0, b when u=1,v=0, c when u=0,v=1, and a linear combination of a,b,c otherwise

CalculateAngle(Vector3, Vector3)

Calculates the angle (in radians) between two vectors.

Declaration
public static float CalculateAngle(Vector3 first, Vector3 second)
Parameters
Type Name Description
Vector3 first

The first vector.

Vector3 second

The second vector.

Returns
Type Description
Single

Angle (in radians) between the vectors.

Remarks

Note that the returned angle is never bigger than the constant Pi.

CalculateAngle(ref Vector3, ref Vector3, out Single)

Calculates the angle (in radians) between two vectors.

Declaration
public static void CalculateAngle(ref Vector3 first, ref Vector3 second, out float result)
Parameters
Type Name Description
Vector3 first

The first vector.

Vector3 second

The second vector.

Single result

Angle (in radians) between the vectors.

Remarks

Note that the returned angle is never bigger than the constant Pi.

Clamp(Vector3, Vector3, Vector3)

Clamp a vector to the given minimum and maximum vectors

Declaration
public static Vector3 Clamp(Vector3 vec, Vector3 min, Vector3 max)
Parameters
Type Name Description
Vector3 vec

Input vector

Vector3 min

Minimum vector

Vector3 max

Maximum vector

Returns
Type Description
Vector3

The clamped vector

Clamp(ref Vector3, ref Vector3, ref Vector3, out Vector3)

Clamp a vector to the given minimum and maximum vectors

Declaration
public static void Clamp(ref Vector3 vec, ref Vector3 min, ref Vector3 max, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

Input vector

Vector3 min

Minimum vector

Vector3 max

Maximum vector

Vector3 result

The clamped vector

ComponentMax(Vector3, Vector3)

Returns a vector created from the largest of the corresponding components of the given vectors.

Declaration
public static Vector3 ComponentMax(Vector3 a, Vector3 b)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Returns
Type Description
Vector3

The component-wise maximum

ComponentMax(ref Vector3, ref Vector3, out Vector3)

Returns a vector created from the largest of the corresponding components of the given vectors.

Declaration
public static void ComponentMax(ref Vector3 a, ref Vector3 b, out Vector3 result)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Vector3 result

The component-wise maximum

ComponentMin(Vector3, Vector3)

Returns a vector created from the smallest of the corresponding components of the given vectors.

Declaration
public static Vector3 ComponentMin(Vector3 a, Vector3 b)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Returns
Type Description
Vector3

The component-wise minimum

ComponentMin(ref Vector3, ref Vector3, out Vector3)

Returns a vector created from the smallest of the corresponding components of the given vectors.

Declaration
public static void ComponentMin(ref Vector3 a, ref Vector3 b, out Vector3 result)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Vector3 result

The component-wise minimum

Cross(Vector3, Vector3)

Caclulate the cross (vector) product of two vectors

Declaration
public static Vector3 Cross(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

First operand

Vector3 right

Second operand

Returns
Type Description
Vector3

The cross product of the two inputs

Cross(ref Vector3, ref Vector3, out Vector3)

Caclulate the cross (vector) product of two vectors

Declaration
public static void Cross(ref Vector3 left, ref Vector3 right, out Vector3 result)
Parameters
Type Name Description
Vector3 left

First operand

Vector3 right

Second operand

Vector3 result

The cross product of the two inputs

Remarks

It is incorrect to call this method passing the same variable for result as for left or right.

Distance(Vector3, Vector3)

Compute the euclidean distance between two vectors.

Declaration
public static float Distance(Vector3 vec1, Vector3 vec2)
Parameters
Type Name Description
Vector3 vec1

The first vector

Vector3 vec2

The second vector

Returns
Type Description
Single

The distance

Distance(ref Vector3, ref Vector3, out Single)

Compute the euclidean distance between two vectors.

Declaration
public static void Distance(ref Vector3 vec1, ref Vector3 vec2, out float result)
Parameters
Type Name Description
Vector3 vec1

The first vector

Vector3 vec2

The second vector

Single result

The distance

DistanceSquared(Vector3, Vector3)

Compute the squared euclidean distance between two vectors.

Declaration
public static float DistanceSquared(Vector3 vec1, Vector3 vec2)
Parameters
Type Name Description
Vector3 vec1

The first vector

Vector3 vec2

The second vector

Returns
Type Description
Single

The squared distance

DistanceSquared(ref Vector3, ref Vector3, out Single)

Compute the squared euclidean distance between two vectors.

Declaration
public static void DistanceSquared(ref Vector3 vec1, ref Vector3 vec2, out float result)
Parameters
Type Name Description
Vector3 vec1

The first vector

Vector3 vec2

The second vector

Single result

The squared distance

Divide(Vector3, Vector3)

Divides a vector by the components of a vector (scale).

Declaration
public static Vector3 Divide(Vector3 vector, Vector3 scale)
Parameters
Type Name Description
Vector3 vector

Left operand.

Vector3 scale

Right operand.

Returns
Type Description
Vector3

Result of the operation.

Divide(Vector3, Single)

Divides a vector by a scalar.

Declaration
public static Vector3 Divide(Vector3 vector, float scale)
Parameters
Type Name Description
Vector3 vector

Left operand.

Single scale

Right operand.

Returns
Type Description
Vector3

Result of the operation.

Divide(ref Vector3, ref Vector3, out Vector3)

Divide a vector by the components of a vector (scale).

Declaration
public static void Divide(ref Vector3 vector, ref Vector3 scale, out Vector3 result)
Parameters
Type Name Description
Vector3 vector

Left operand.

Vector3 scale

Right operand.

Vector3 result

Result of the operation.

Divide(ref Vector3, Single, out Vector3)

Divides a vector by a scalar.

Declaration
public static void Divide(ref Vector3 vector, float scale, out Vector3 result)
Parameters
Type Name Description
Vector3 vector

Left operand.

Single scale

Right operand.

Vector3 result

Result of the operation.

Dot(Vector3, Vector3)

Calculate the dot (scalar) product of two vectors

Declaration
public static float Dot(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

First operand

Vector3 right

Second operand

Returns
Type Description
Single

The dot product of the two inputs

Dot(ref Vector3, ref Vector3, out Single)

Calculate the dot (scalar) product of two vectors

Declaration
public static void Dot(ref Vector3 left, ref Vector3 right, out float result)
Parameters
Type Name Description
Vector3 left

First operand

Vector3 right

Second operand

Single result

The dot product of the two inputs

Equals(Vector3)

Indicates whether the current vector is equal to another vector.

Declaration
public bool Equals(Vector3 other)
Parameters
Type Name Description
Vector3 other

A vector to compare with this vector.

Returns
Type Description
Boolean

true if the current vector is equal to the vector parameter; otherwise, false.

Equals(Object)

Indicates whether this instance and a specified object are equal.

Declaration
public override bool Equals(object obj)
Parameters
Type Name Description
Object obj

The object to compare to.

Returns
Type Description
Boolean

True if the instances are equal; false otherwise.

Overrides
ValueType.Equals(Object)

GetHashCode()

Returns the hashcode for this instance.

Declaration
public override int GetHashCode()
Returns
Type Description
Int32

A System.Int32 containing the unique hashcode for this instance.

Overrides
ValueType.GetHashCode()

Lerp(Vector3, Vector3, Single)

Returns a new Vector that is the linear blend of the 2 given Vectors

Declaration
public static Vector3 Lerp(Vector3 a, Vector3 b, float blend)
Parameters
Type Name Description
Vector3 a

First input vector

Vector3 b

Second input vector

Single blend

The blend factor. a when blend=0, b when blend=1.

Returns
Type Description
Vector3

a when blend=0, b when blend=1, and a linear combination otherwise

Lerp(ref Vector3, ref Vector3, Single, out Vector3)

Returns a new Vector that is the linear blend of the 2 given Vectors

Declaration
public static void Lerp(ref Vector3 a, ref Vector3 b, float blend, out Vector3 result)
Parameters
Type Name Description
Vector3 a

First input vector

Vector3 b

Second input vector

Single blend

The blend factor. a when blend=0, b when blend=1.

Vector3 result

a when blend=0, b when blend=1, and a linear combination otherwise

MagnitudeMax(Vector3, Vector3)

Returns the Vector3 with the maximum magnitude. If the magnitudes are equal, the first vector is selected.

Declaration
public static Vector3 MagnitudeMax(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Returns
Type Description
Vector3

The maximum Vector3

MagnitudeMax(ref Vector3, ref Vector3, out Vector3)

Returns the Vector3 with the maximum magnitude. If the magnitudes are equal, the first vector is selected.

Declaration
public static void MagnitudeMax(ref Vector3 left, ref Vector3 right, out Vector3 result)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Vector3 result

The magnitude-wise maximum

MagnitudeMin(Vector3, Vector3)

Returns the Vector3 with the minimum magnitude. If the magnitudes are equal, the second vector is selected.

Declaration
public static Vector3 MagnitudeMin(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Returns
Type Description
Vector3

The minimum Vector3

MagnitudeMin(ref Vector3, ref Vector3, out Vector3)

Returns the Vector3 with the minimum magnitude. If the magnitudes are equal, the second vector is selected.

Declaration
public static void MagnitudeMin(ref Vector3 left, ref Vector3 right, out Vector3 result)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Vector3 result

The magnitude-wise minimum

Max(Vector3, Vector3)

Returns the Vector3 with the minimum magnitude

Declaration
[Obsolete("Use MagnitudeMax() instead.")]
public static Vector3 Max(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Returns
Type Description
Vector3

The minimum Vector3

Min(Vector3, Vector3)

Returns the Vector3 with the minimum magnitude

Declaration
[Obsolete("Use MagnitudeMin() instead.")]
public static Vector3 Min(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

Left operand

Vector3 right

Right operand

Returns
Type Description
Vector3

The minimum Vector3

Multiply(Vector3, Vector3)

Multiplies a vector by the components a vector (scale).

Declaration
public static Vector3 Multiply(Vector3 vector, Vector3 scale)
Parameters
Type Name Description
Vector3 vector

Left operand.

Vector3 scale

Right operand.

Returns
Type Description
Vector3

Result of the operation.

Multiply(Vector3, Single)

Multiplies a vector by a scalar.

Declaration
public static Vector3 Multiply(Vector3 vector, float scale)
Parameters
Type Name Description
Vector3 vector

Left operand.

Single scale

Right operand.

Returns
Type Description
Vector3

Result of the operation.

Multiply(ref Vector3, ref Vector3, out Vector3)

Multiplies a vector by the components of a vector (scale).

Declaration
public static void Multiply(ref Vector3 vector, ref Vector3 scale, out Vector3 result)
Parameters
Type Name Description
Vector3 vector

Left operand.

Vector3 scale

Right operand.

Vector3 result

Result of the operation.

Multiply(ref Vector3, Single, out Vector3)

Multiplies a vector by a scalar.

Declaration
public static void Multiply(ref Vector3 vector, float scale, out Vector3 result)
Parameters
Type Name Description
Vector3 vector

Left operand.

Single scale

Right operand.

Vector3 result

Result of the operation.

Normalize()

Scales the Vector3 to unit length.

Declaration
public void Normalize()

Normalize(Vector3)

Scale a vector to unit length

Declaration
public static Vector3 Normalize(Vector3 vec)
Parameters
Type Name Description
Vector3 vec

The input vector

Returns
Type Description
Vector3

The normalized vector

Normalize(ref Vector3, out Vector3)

Scale a vector to unit length

Declaration
public static void Normalize(ref Vector3 vec, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The input vector

Vector3 result

The normalized vector

Normalized()

Returns a copy of the Vector3 scaled to unit length.

Declaration
public Vector3 Normalized()
Returns
Type Description
Vector3

NormalizeFast()

Scales the Vector3 to approximately unit length.

Declaration
public void NormalizeFast()

NormalizeFast(Vector3)

Scale a vector to approximately unit length

Declaration
public static Vector3 NormalizeFast(Vector3 vec)
Parameters
Type Name Description
Vector3 vec

The input vector

Returns
Type Description
Vector3

The normalized vector

NormalizeFast(ref Vector3, out Vector3)

Scale a vector to approximately unit length

Declaration
public static void NormalizeFast(ref Vector3 vec, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The input vector

Vector3 result

The normalized vector

Project(Vector3, Single, Single, Single, Single, Single, Single, Matrix4)

Projects a vector from object space into screen space.

Declaration
public static Vector3 Project(Vector3 vector, float x, float y, float width, float height, float minZ, float maxZ, Matrix4 worldViewProjection)
Parameters
Type Name Description
Vector3 vector

The vector to project.

Single x

The X coordinate of the viewport.

Single y

The Y coordinate of the viewport.

Single width

The width of the viewport.

Single height

The height of the viewport.

Single minZ

The minimum depth of the viewport.

Single maxZ

The maximum depth of the viewport.

Matrix4 worldViewProjection

The world-view-projection matrix.

Returns
Type Description
Vector3

The vector in screen space.

Remarks

To project to normalized device coordinates (NDC) use the following parameters: Project(vector, -1, -1, 2, 2, -1, 1, worldViewProjection).

Subtract(Vector3, Vector3)

Subtract one Vector from another

Declaration
public static Vector3 Subtract(Vector3 a, Vector3 b)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Returns
Type Description
Vector3

Result of subtraction

Subtract(ref Vector3, ref Vector3, out Vector3)

Subtract one Vector from another

Declaration
public static void Subtract(ref Vector3 a, ref Vector3 b, out Vector3 result)
Parameters
Type Name Description
Vector3 a

First operand

Vector3 b

Second operand

Vector3 result

Result of subtraction

ToString()

Returns a System.String that represents the current Vector3.

Declaration
public override string ToString()
Returns
Type Description
String
Overrides
ValueType.ToString()

Transform(Matrix3, Vector3)

Transform a Vector by the given Matrix using right-handed notation

Declaration
public static Vector3 Transform(Matrix3 mat, Vector3 vec)
Parameters
Type Name Description
Matrix3 mat

The desired transformation

Vector3 vec

The vector to transform

Returns
Type Description
Vector3

Transform(ref Matrix3, ref Vector3, out Vector3)

Transform a Vector by the given Matrix using right-handed notation

Declaration
public static void Transform(ref Matrix3 mat, ref Vector3 vec, out Vector3 result)
Parameters
Type Name Description
Matrix3 mat

The desired transformation

Vector3 vec

The vector to transform

Vector3 result

The transformed vector

Transform(Vector3, Matrix3)

Transform a Vector by the given Matrix

Declaration
public static Vector3 Transform(Vector3 vec, Matrix3 mat)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix3 mat

The desired transformation

Returns
Type Description
Vector3

The transformed vector

Transform(Vector3, Quaternion)

Transforms a vector by a quaternion rotation.

Declaration
public static Vector3 Transform(Vector3 vec, Quaternion quat)
Parameters
Type Name Description
Vector3 vec

The vector to transform.

Quaternion quat

The quaternion to rotate the vector by.

Returns
Type Description
Vector3

The result of the operation.

Transform(ref Vector3, ref Matrix3, out Vector3)

Transform a Vector by the given Matrix

Declaration
public static void Transform(ref Vector3 vec, ref Matrix3 mat, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix3 mat

The desired transformation

Vector3 result

The transformed vector

Transform(ref Vector3, ref Quaternion, out Vector3)

Transforms a vector by a quaternion rotation.

Declaration
public static void Transform(ref Vector3 vec, ref Quaternion quat, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The vector to transform.

Quaternion quat

The quaternion to rotate the vector by.

Vector3 result

The result of the operation.

TransformNormal(Vector3, Matrix4)

Transform a Normal by the given Matrix

Declaration
public static Vector3 TransformNormal(Vector3 norm, Matrix4 mat)
Parameters
Type Name Description
Vector3 norm

The normal to transform

Matrix4 mat

The desired transformation

Returns
Type Description
Vector3

The transformed normal

Remarks

This calculates the inverse of the given matrix, use TransformNormalInverse if you already have the inverse to avoid this extra calculation

TransformNormal(ref Vector3, ref Matrix4, out Vector3)

Transform a Normal by the given Matrix

Declaration
public static void TransformNormal(ref Vector3 norm, ref Matrix4 mat, out Vector3 result)
Parameters
Type Name Description
Vector3 norm

The normal to transform

Matrix4 mat

The desired transformation

Vector3 result

The transformed normal

Remarks

This calculates the inverse of the given matrix, use TransformNormalInverse if you already have the inverse to avoid this extra calculation

TransformNormalInverse(Vector3, Matrix4)

Transform a Normal by the (transpose of the) given Matrix

Declaration
public static Vector3 TransformNormalInverse(Vector3 norm, Matrix4 invMat)
Parameters
Type Name Description
Vector3 norm

The normal to transform

Matrix4 invMat

The inverse of the desired transformation

Returns
Type Description
Vector3

The transformed normal

Remarks

This version doesn't calculate the inverse matrix. Use this version if you already have the inverse of the desired transform to hand

TransformNormalInverse(ref Vector3, ref Matrix4, out Vector3)

Transform a Normal by the (transpose of the) given Matrix

Declaration
public static void TransformNormalInverse(ref Vector3 norm, ref Matrix4 invMat, out Vector3 result)
Parameters
Type Name Description
Vector3 norm

The normal to transform

Matrix4 invMat

The inverse of the desired transformation

Vector3 result

The transformed normal

Remarks

This version doesn't calculate the inverse matrix. Use this version if you already have the inverse of the desired transform to hand

TransformPerspective(Vector3, Matrix4)

Transform a Vector3 by the given Matrix, and project the resulting Vector4 back to a Vector3

Declaration
public static Vector3 TransformPerspective(Vector3 vec, Matrix4 mat)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix4 mat

The desired transformation

Returns
Type Description
Vector3

The transformed vector

TransformPerspective(ref Vector3, ref Matrix4, out Vector3)

Transform a Vector3 by the given Matrix, and project the resulting Vector4 back to a Vector3

Declaration
public static void TransformPerspective(ref Vector3 vec, ref Matrix4 mat, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix4 mat

The desired transformation

Vector3 result

The transformed vector

TransformPosition(Vector3, Matrix4)

Transform a Position by the given Matrix

Declaration
public static Vector3 TransformPosition(Vector3 pos, Matrix4 mat)
Parameters
Type Name Description
Vector3 pos

The position to transform

Matrix4 mat

The desired transformation

Returns
Type Description
Vector3

The transformed position

TransformPosition(ref Vector3, ref Matrix4, out Vector3)

Transform a Position by the given Matrix

Declaration
public static void TransformPosition(ref Vector3 pos, ref Matrix4 mat, out Vector3 result)
Parameters
Type Name Description
Vector3 pos

The position to transform

Matrix4 mat

The desired transformation

Vector3 result

The transformed position

TransformVector(Vector3, Matrix4)

Transform a direction vector by the given Matrix Assumes the matrix has a bottom row of (0,0,0,1), that is the translation part is ignored.

Declaration
public static Vector3 TransformVector(Vector3 vec, Matrix4 mat)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix4 mat

The desired transformation

Returns
Type Description
Vector3

The transformed vector

TransformVector(ref Vector3, ref Matrix4, out Vector3)

Transform a direction vector by the given Matrix Assumes the matrix has a bottom row of (0,0,0,1), that is the translation part is ignored.

Declaration
public static void TransformVector(ref Vector3 vec, ref Matrix4 mat, out Vector3 result)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix4 mat

The desired transformation

Vector3 result

The transformed vector

Remarks

It is incorrect to call this method passing the same variable for result as for vec.

Unproject(Vector3, Single, Single, Single, Single, Single, Single, Matrix4)

Projects a vector from screen space into object space.

Declaration
public static Vector3 Unproject(Vector3 vector, float x, float y, float width, float height, float minZ, float maxZ, Matrix4 inverseWorldViewProjection)
Parameters
Type Name Description
Vector3 vector

The vector to project.

Single x

The X coordinate of the viewport.

Single y

The Y coordinate of the viewport.

Single width

The width of the viewport.

Single height

The height of the viewport.

Single minZ

The minimum depth of the viewport.

Single maxZ

The maximum depth of the viewport.

Matrix4 inverseWorldViewProjection

The inverse of the world-view-projection matrix.

Returns
Type Description
Vector3

The vector in object space.

Remarks

To project from normalized device coordinates (NDC) use the following parameters: Project(vector, -1, -1, 2, 2, -1, 1, inverseWorldViewProjection).

Operators

Addition(Vector3, Vector3)

Adds two instances.

Declaration
public static Vector3 operator +(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

The first instance.

Vector3 right

The second instance.

Returns
Type Description
Vector3

The result of the calculation.

Division(Vector3, Single)

Divides an instance by a scalar.

Declaration
public static Vector3 operator /(Vector3 vec, float scale)
Parameters
Type Name Description
Vector3 vec

The instance.

Single scale

The scalar.

Returns
Type Description
Vector3

The result of the calculation.

Equality(Vector3, Vector3)

Compares two instances for equality.

Declaration
public static bool operator ==(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

The first instance.

Vector3 right

The second instance.

Returns
Type Description
Boolean

True, if left equals right; false otherwise.

Inequality(Vector3, Vector3)

Compares two instances for inequality.

Declaration
public static bool operator !=(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

The first instance.

Vector3 right

The second instance.

Returns
Type Description
Boolean

True, if left does not equal right; false otherwise.

Multiply(Matrix3, Vector3)

Transform a Vector by the given Matrix using right-handed notation

Declaration
public static Vector3 operator *(Matrix3 mat, Vector3 vec)
Parameters
Type Name Description
Matrix3 mat

The desired transformation

Vector3 vec

The vector to transform

Returns
Type Description
Vector3

The transformed vector

Multiply(Quaternion, Vector3)

Transforms a vector by a quaternion rotation.

Declaration
public static Vector3 operator *(Quaternion quat, Vector3 vec)
Parameters
Type Name Description
Quaternion quat

The quaternion to rotate the vector by.

Vector3 vec

The vector to transform.

Returns
Type Description
Vector3

Multiply(Vector3, Matrix3)

Transform a Vector by the given Matrix.

Declaration
public static Vector3 operator *(Vector3 vec, Matrix3 mat)
Parameters
Type Name Description
Vector3 vec

The vector to transform

Matrix3 mat

The desired transformation

Returns
Type Description
Vector3

The transformed vector

Multiply(Vector3, Vector3)

Component-wise multiplication between the specified instance by a scale vector.

Declaration
public static Vector3 operator *(Vector3 vec, Vector3 scale)
Parameters
Type Name Description
Vector3 vec

Right operand.

Vector3 scale

Left operand.

Returns
Type Description
Vector3

Result of multiplication.

Multiply(Vector3, Single)

Multiplies an instance by a scalar.

Declaration
public static Vector3 operator *(Vector3 vec, float scale)
Parameters
Type Name Description
Vector3 vec

The instance.

Single scale

The scalar.

Returns
Type Description
Vector3

The result of the calculation.

Multiply(Single, Vector3)

Multiplies an instance by a scalar.

Declaration
public static Vector3 operator *(float scale, Vector3 vec)
Parameters
Type Name Description
Single scale

The scalar.

Vector3 vec

The instance.

Returns
Type Description
Vector3

The result of the calculation.

Subtraction(Vector3, Vector3)

Subtracts two instances.

Declaration
public static Vector3 operator -(Vector3 left, Vector3 right)
Parameters
Type Name Description
Vector3 left

The first instance.

Vector3 right

The second instance.

Returns
Type Description
Vector3

The result of the calculation.

UnaryNegation(Vector3)

Negates an instance.

Declaration
public static Vector3 operator -(Vector3 vec)
Parameters
Type Name Description
Vector3 vec

The instance.

Returns
Type Description
Vector3

The result of the calculation.

Implements

System.IEquatable<T>
In This Article
Back to top Generated by DocFX