reckfellENGINE

Basis

Три оси линейного преобразования 3D без переноса.

На этой странице
struct BasisReckfellSharpНаследует ValueType

Basis хранит поворот, масштаб и возможный shear. Basis.Identity — единичный базис; нулевая структура не заменяет его. Определитель при равномерном масштабе s равен s³, при s = 2 — 8. Нулевой определитель означает отсутствие обратной матрицы.

Для чистой ориентации нужны ортонормированные оси либо единичный Quaternion. Orthonormalized меняет исходный масштаб/искажение. Нормаль при неравномерном масштабе переносите через Inverse().Transposed(), затем нормализуйте; обычное умножение Basis не сохраняет её перпендикулярность поверхности.

Практическое руководство.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы4

Basis4 перегрузки
# Basis · 1/4
C#
public Basis(Quaternion quaternion);

Создает Basis из 3-х векторов осей. Это столбцы матрицы базиса.

Параметры
ИмяТипПо умолчанию
quaternionQuaternion—
quaternion

Кватернион для создания основы.

# Basis · 2/4
C#
public Basis(Vector3 column0, Vector3 column1, Vector3 column2);

Создает Basis из 3-х векторов осей. Это столбцы матрицы базиса.

Параметры
ИмяТипПо умолчанию
column0Vector3—
column1Vector3—
column2Vector3—
column0

Вектор Х, или колонка 0.

column1

Вектор Y, или колонка 1.

column2

Вектор Z, или колонка 2.

# Basis · 3/4
C#
public Basis(Vector3 axis, float angle);

Создает Basis из 3-х векторов осей. Это столбцы матрицы базиса.

Параметры
ИмяТипПо умолчанию
axisVector3—
anglefloat—
axis

Ось, чтобы повернуться, должна быть нормализована.

angle

Угол поворота в радианах.

# Basis · 4/4
C#
public Basis(float xx, float yx, float zx, float xy, float yy, float zy, float xz, float yz, float zz);

Создает Basis из 3-х векторов осей. Это столбцы матрицы базиса.

Параметры
ИмяТипПо умолчанию
xxfloat—
yxfloat—
zxfloat—
xyfloat—
yyfloat—
zyfloat—
xzfloat—
yzfloat—
zzfloat—
xx

X компонент вектора X, доступ через b.X.X или [0][0].

yx

Компонент X вектора Y, доступ через b.Y.X или [1][0].

zx

X компонент вектора Z, доступ через b.Z.X или [2][0].

xy

Y компонент вектора X, доступ через b.X.Y или [0][1].

yy

Y компонент вектора Y, доступ к которому обеспечивается через b.Y.Y или [1][1].

zy

Y компонент столбца Z, доступ через b.Y.Y или [2][1].

xz

Z компонент вектора X, доступ через b.X.Y или [0][2].

yz

Z компонент вектора Y, доступ через b.Y.Y или [1][2].

zz

Z компонент столбца Z, доступ через b.Y.Y или [2][2].

Свойства13

Column0Свойство
# Column0
C#
public Vector3 Column0 { get; set; }

Колонка 0 матрицы оснований (вектор Х).

Column1Свойство
# Column1
C#
public Vector3 Column1 { get; set; }

Колонка 1 базовой матрицы (вектор Y).

Column2Свойство
# Column2
C#
public Vector3 Column2 { get; set; }

Колонка 2 базовой матрицы (вектор Z).

FlipXСвойство
# FlipX
C#
public static Basis FlipX { get; }

Когда любой базис умножается на Basis.FlipX, он инвертирует все компоненты оси Basis.X (столбец X). Когда Basis.FlipX умножается на любой базис, он инвертирует компонент Vector3.X всех осей (строка X).

FlipYСвойство
# FlipY
C#
public static Basis FlipY { get; }

Когда любой базис умножается на Basis.FlipY, он инвертирует все компоненты оси Basis.Y (столбец Y). Когда Basis.FlipY умножается на любой базис, он инвертирует компонент Vector3.Y всех осей (строка Y).

FlipZСвойство
# FlipZ
C#
public static Basis FlipZ { get; }

Когда любой базис умножается на Basis.FlipZ, он инвертирует все компоненты оси Basis.Z (столбец Z). Когда Basis.FlipZ умножается на любой базис, он инвертирует компонент Vector3.Z всех осей (строка Z).

IdentityСвойство
# Identity
C#
public static Basis Identity { get; }

Тождество Basis. Это ортонормальный базис без вращения, без сдвига и масштабом Vector3.One. Это также означает, что:

Если a Vector3 или иного рода Basis Преобразуется (многократно) на эту постоянную, не происходит никакой трансформации. Примечание: В C# эта константа эквивалентна созданию a [конструктор Basis] без каких-либо аргументов. Он может быть использован для того, чтобы сделать ваш код более ясным и чтобы он соответствовал C#.

Item2 перегрузки
# Item · 1/2
C#
public Vector3 this[int column] { get; set; }

Целые колонки в виде Vector3.

# Item · 2/2
C#
public float this[int column, int row] { get; set; }

Элементы матрицы доступа в основном столбце.

ScaleСвойство
# Scale
C#
public Vector3 Scale { get; }

Исходя из того, что матрица представляет собой сочетание ротации и масштабирования, возвратить абсолютное значение коэффициентов масштабирования вдоль каждой оси.

XСвойство
# X
C#
public Vector3 X { get; set; }

Ось X базиса и столбец 0 матрицы. На основе тождества этот вектор указывает вправо (Vector3.Right).

YСвойство
# Y
C#
public Vector3 Y { get; set; }

Ось Y базиса и столбец 1 матрицы. На основе тождества этот вектор направлен вверх (Vector3.Up).

ZСвойство
# Z
C#
public Vector3 Z { get; set; }

Ось Z базиса и столбец 2 матрицы. На основе тождества этот вектор указывает назад (Vector3.Back).

Методы29

Determinantfloat
# Determinant
C#
public float Determinant();

Определитель матрицы 3×3. Для равномерного масштаба s равен s³: масштаб 2 даёт 8. Ноль означает необратимость; отрицательный знак меняет ориентацию базиса.

Возвращает float

Определяющий фактор базовой матрицы.

Equals2 перегрузки
# Equals · 1/2
C#
public bool Equals(Basis other);

Returns (Возврат) true если базовые матрицы являются точно Примечание: Из-за ошибок в точности в плавающей точке рассмотреть вопрос об использовании Basis.IsEqualApprox вместо этого, что более надежно.

Параметры
ИмяТипПо умолчанию
otherBasis—
other

Другая основа.

Возвращает bool

Является ли матрица оснований точно равной.

# Equals · 2/2
C#
public override bool Equals(object? obj);

Returns (Возврат) true если: Basis это точно равно данному объекту (obj). Примечание: Из-за ошибок в точности в плавающей точке рассмотреть вопрос об использовании Basis.IsEqualApprox вместо этого, что более надежно.

Параметры
ИмяТипПо умолчанию
objobject—
obj

Объект, с которым можно сравниться.

Возвращает bool

Является ли матрица оснований и объект точно равны.

FromEulerBasis
# FromEuler
C#
public static Basis FromEuler(Vector3 euler, EulerOrder order = EulerOrder.Yxz);

Создает новый Basis, который представляет собой только вращение относительно заданного Vector3 Углов Эйлера в радианах.

  • Vector3.X должен содержать угол вокруг оси Basis.X (тангаж);
  • Vector3.Y должен содержать угол вокруг оси Basis.Y (рыскание);
  • Vector3.Z должен содержать угол вокруг оси Basis.Z (крен).
C#
// Creates a Basis whose z axis points down.
var myBasis = Basis.FromEuler(new Vector3(Mathf.Tau / 4.0f, 0.0f, 0.0f));

ReckfellApi.Print(myBasis.Z); // Prints (0, -1, 0)

Порядок каждого последующего вращения можно изменить с помощью order (см. константы EulerOrder). В Reckfell углы Эйлера всегда используют внутренний порядок. По умолчанию используется внутренняя конвенция YXZ (EULER_ORDER_YXZ): базис сначала вращается вокруг локальной оси Y (рыскание), затем вокруг локальной оси X (тангаж) и, наконец, вокруг локальной оси Z (крен). При использовании противоположного метода Basis.GetEuler для разложения вращения этот порядок меняется на обратный.

Параметры
ИмяТипПо умолчанию
eulerVector3—
orderEulerOrderEulerOrder.Yxz
euler

Используемые углы Эйлера.

order

Порядок построения углов Эйлера.

Возвращает Basis
FromScaleBasis
# FromScale
C#
public static Basis FromScale(Vector3 scale);

Создает новый Basis, который представляет только масштаб, без вращения или сдвига, из заданного вектора scale.

C#
var myBasis = Basis.FromScale(new Vector3(2.0f, 4.0f, 8.0f));

ReckfellApi.Print(myBasis.X); // Prints (2, 0, 0)
ReckfellApi.Print(myBasis.Y); // Prints (0, 4, 0)
ReckfellApi.Print(myBasis.Z); // Prints (0, 0, 8)

Примечание: В линейной алгебре матрица этого базиса также известна как диагональная матрица.

Параметры
ИмяТипПо умолчанию
scaleVector3—
scale

Шкала взносов Vector3.

Возвращает Basis

Чистая чаша Basis Матрица.

GetEulerVector3
# GetEuler
C#
public Vector3 GetEuler(EulerOrder order = EulerOrder.Yxz);

Возвращает вращение базиса в виде Vector3 углов Эйлера в радианах. Возвращаемое значение:

  • Vector3.X содержит угол вокруг оси Basis.X (тангаж);
  • Vector3.Y содержит угол вокруг оси Basis.Y (рыскание);
  • Vector3.Z содержит угол вокруг оси Basis.Z (крен). Порядок каждого последующего вращения можно изменить с помощью order (см. константы EulerOrder). В Reckfell углы Эйлера всегда используют внутренний порядок. По умолчанию используется внутренняя конвенция YXZ (EULER_ORDER_YXZ): поскольку мы разлагаем, сначала вычисляется локальная Z (крен), затем локальная X (тангаж) и, наконец, локальная Y (рыскание). При использовании противоположного метода Basis.FromEuler для построения вращения порядок меняется на обратный. Примечание: Для корректного возврата этого метода базис должен быть ортонормированным (см. Basis.Orthonormalized). Примечание: Углы Эйлера гораздо более интуитивно понятны, но не подходят для 3D-математики. Поэтому рекомендуется использовать метод Basis.GetRotationQuaternion, который возвращает Quaternion. Примечание: В панели инспектора вращение базиса часто отображается в углах Эйлера (в градусах), как это происходит со свойством Entity3D.Rotation.
Параметры
ИмяТипПо умолчанию
orderEulerOrderEulerOrder.Yxz
order

Приказ Эйлера использовать. По умолчанию используйте порядок YXZ (самый распространенный).

Возвращает Vector3

A Vector3 , представляющее собой вращение основы в углах Эйлера.

GetHashCodeint
# GetHashCode
C#
public override int GetHashCode();

Выполняет функцию хеширования Basis.

Возвращает int

Код хэша для этой основы.

GetRotationQuaternionQuaternion
# GetRotationQuaternion
C#
public Quaternion GetRotationQuaternion();

Возвращает вращение этого базиса как Quaternion. Примечание: Кватернионы гораздо больше подходят для 3D-математики, но менее интуитивно понятны. Для пользовательских интерфейсов рассмотрите возможность использования метода Basis.GetEuler, который возвращает углы Эйлера.

Возвращает Quaternion

Базовая ротация.

InverseBasis
# Inverse
C#
public Basis Inverse();

Возвращает обратный Basis. При определителе, точно равном 0, выбрасывает InvalidOperationException; почти вырожденные данные могут сильно усилить погрешность.

Возвращает Basis

Обратное значение. При точном нулевом определителе результат не возвращается: выбрасывается InvalidOperationException.

IsEqualApproxbool
# IsEqualApprox
C#
public bool IsEqualApprox(Basis other);

Возвращает true, если этот базис и b приблизительно равны, вызывая @GlobalScope.is_equal_approx для всех компонентов вектора.

Параметры
ИмяТипПо умолчанию
otherBasis—
other

Другая основа для сравнения.

Возвращает bool

О том, равны ли основания.

IsFinitebool
# IsFinite
C#
public bool IsFinite();

Возвращает true, если этот базис конечен, вызывая @GlobalScope.is_finite для всех компонентов вектора.

Возвращает bool

Является ли этот вектор конечным или нет.

LookingAt2 перегрузки
# LookingAt · 1/2
C#
public static Basis LookingAt(Vector3 target, Vector3 up);

Создает новый Basis с поворотом таким образом, что прямая ось (-Z) указывает на позицию target. По умолчанию ось -Z (камера вперед) рассматривается как прямая (подразумевается, что +X находится справа). Если use_model_front равно true, ось +Z (ассет спереди) рассматривается как прямая (подразумевается, что +X находится слева) и указывает на позицию target. Верхняя ось (+Y) указывает как можно ближе к вектору up, оставаясь перпендикулярной прямой оси. Возвращаемый базис ортонормализован (см. Basis.Orthonormalized). target и up не могут быть Vector3.Zero и не должны быть коллинеарными, чтобы избежать непреднамеренного поворота вокруг локальной оси Z.

Параметры
ИмяТипПо умолчанию
targetVector3—
upVector3—
Возвращает Basis
# LookingAt · 2/2
C#
public static Basis LookingAt(Vector3 target, Vector3? up = default, bool useModelFront = false);

Создает новый Basis с поворотом таким образом, что прямая ось (-Z) указывает на позицию target. По умолчанию ось -Z (камера вперед) рассматривается как прямая (подразумевается, что +X находится справа). Если use_model_front равно true, ось +Z (ассет спереди) рассматривается как прямая (подразумевается, что +X находится слева) и указывает на позицию target. Верхняя ось (+Y) указывает как можно ближе к вектору up, оставаясь перпендикулярной прямой оси. Возвращаемый базис ортонормализован (см. Basis.Orthonormalized). target и up не могут быть Vector3.Zero и не должны быть коллинеарными, чтобы избежать непреднамеренного поворота вокруг локальной оси Z.

Параметры
ИмяТипПо умолчанию
targetVector3—
upVector3?default
useModelFrontboolfalse
target

Положение, на которое нужно смотреть.

up

Относительное направление вверх.

useModelFront

Если это так, то модель ориентирована наоборот, в направлении передней оси модели (+Z, Vector3. Модель " Передний край &quuot; , которая более полезна для ориентации 3D моделей.

Возвращает Basis

Полученная в результате матрица основы.

OrthonormalizedBasis
# Orthonormalized
C#
public Basis Orthonormalized();

Возвращает ортонормированную версию этого базиса. Ортонормированный базис является как ортогональным (оси перпендикулярны друг другу), так и нормализованным (оси имеют длину 1.0), что также означает, что он может представлять только поворот. Часто бывает полезно вызывать этот метод, чтобы избежать ошибок округления на основе поворота:

C#
// Rotate this Entity3D every frame.
public override void _Process(double delta)
{
    Basis = Basis.Rotated(Vector3.Up, Mathf.Tau * (float)delta)
            .Rotated(Vector3.Right, Mathf.Tau * (float)delta)
            .Orthonormalized();
}
Возвращает Basis

Матрица ортопедической основы.

RotatedBasis
# Rotated
C#
public Basis Rotated(Vector3 axis, float angle);

Возвращает копию этого базиса, повернутую вокруг заданной axis на заданный angle (в радианах). axis должен быть нормализованным вектором (см. Vector3.Normalized). Если angle положительный, базис поворачивается против часовой стрелки вокруг оси.

C#
var myBasis = Basis.Identity;
var angle = Mathf.Tau / 2.0f;

myBasis = myBasis.Rotated(Vector3.Up, angle);    // Rotate around the up axis (yaw).
myBasis = myBasis.Rotated(Vector3.Right, angle); // Rotate around the right axis (pitch).
myBasis = myBasis.Rotated(Vector3.Back, angle);  // Rotate around the back axis (roll).
Параметры
ИмяТипПо умолчанию
axisVector3—
anglefloat—
axis

Ось, чтобы повернуться, должна быть нормализована.

angle

Угол поворота в радианах.

Возвращает Basis

Матрица поворачиваемых баз.

ScaledBasis
# Scaled
C#
public Basis Scaled(Vector3 scale);

Возвращает этот базис с компонентами каждой оси, масштабированными по заданным компонентам scale. Строки матрицы базиса умножаются на компоненты scale. Эта операция является глобальной шкалой (относительно родителя).

C#
var myBasis = new Basis(
    new Vector3(1.0f, 1.0f, 1.0f),
    new Vector3(2.0f, 2.0f, 2.0f),
    new Vector3(3.0f, 3.0f, 3.0f)
);
myBasis = myBasis.Scaled(new Vector3(0.0f, 2.0f, -2.0f));

ReckfellApi.Print(myBasis.X); // Prints (0, 2, -2)
ReckfellApi.Print(myBasis.Y); // Prints (0, 4, -4)
ReckfellApi.Print(myBasis.Z); // Prints (0, 6, -6)
Параметры
ИмяТипПо умолчанию
scaleVector3—
scale

Масштаб для введения.

Возвращает Basis

Масштабная матрица.

ScaledLocalBasis
# ScaledLocal
C#
public Basis ScaledLocal(Vector3 scale);

Возвращает этот базис, где каждая ось масштабирована по соответствующему компоненту в заданном scale. Столбцы базисной матрицы умножаются на компоненты scale. Эта операция является локальной (относительной) шкалой.

C#
var myBasis = new Basis(
    new Vector3(1.0f, 1.0f, 1.0f),
    new Vector3(2.0f, 2.0f, 2.0f),
    new Vector3(3.0f, 3.0f, 3.0f)
);
myBasis = myBasis.ScaledLocal(new Vector3(0.0f, 2.0f, -2.0f));

ReckfellApi.Print(myBasis.X); // Prints (0, 0, 0)
ReckfellApi.Print(myBasis.Y); // Prints (4, 4, 4)
ReckfellApi.Print(myBasis.Z); // Prints (-6, -6, -6)
Параметры
ИмяТипПо умолчанию
scaleVector3—
scale

Масштаб для введения.

Возвращает Basis

Масштабная матрица.

SlerpBasis
# Slerp
C#
public Basis Slerp(Basis target, float weight);

Выполняет сферически-линейную интерполяцию с базисом to, заданным weight. И этот базис, и to должны представлять поворот. Пример: Плавно повернуть Entity3D к целевому базису с течением времени с Tween:

Параметры
ИмяТипПо умолчанию
targetBasis—
weightfloat—
target

Место назначения для интерполяции.

weight

Значение на диапазоне от 0,0 до 1,0, представляющее собой величину интерполяции.

Возвращает Basis

Получаемая в результате матрица интерполяции.

Tdotxfloat
# Tdotx
C#
public float Tdotx(Vector3 with);

Возвращает транспонированное скалярное произведение между with и осью Basis.X (см. Basis.Transposed). Это эквивалентно basis.x.dot(vector).

Параметры
ИмяТипПо умолчанию
withVector3—
with

Вектор для расчета продукта с точки.

Возвращает float

Получаемый продукт.

Tdotyfloat
# Tdoty
C#
public float Tdoty(Vector3 with);

Возвращает транспонированное скалярное произведение между with и осью Basis.Y (см. Basis.Transposed). Это эквивалентно basis.y.dot(vector).

Параметры
ИмяТипПо умолчанию
withVector3—
with

Вектор для расчета продукта с точки.

Возвращает float

Получаемый продукт.

Tdotzfloat
# Tdotz
C#
public float Tdotz(Vector3 with);

Возвращает транспонированное скалярное произведение между with и осью Basis.Z (см. Basis.Transposed). Это эквивалентно basis.z.dot(vector).

Параметры
ИмяТипПо умолчанию
withVector3—
with

Вектор для расчета продукта с точки.

Возвращает float

Получаемый продукт.

ToString2 перегрузки
# ToString · 1/2
C#
public override string ToString();

Преобразует это Basis к а string.

Возвращает string

A string :: представление этой основы.

# ToString · 2/2
C#
public string ToString(string? format);

Преобразует это Basis к а string с указанным format.

Параметры
ИмяТипПо умолчанию
formatstring—
Возвращает string

A string :: представление этой основы.

TransposedBasis
# Transposed
C#
public Basis Transposed();

Возвращает транспонированную версию этого базиса. Это превращает столбцы матрицы базиса в строки, а ее строки в столбцы.

C#
var myBasis = new Basis(
    new Vector3(1.0f, 2.0f, 3.0f),
    new Vector3(4.0f, 5.0f, 6.0f),
    new Vector3(7.0f, 8.0f, 9.0f)
);
myBasis = myBasis.Transposed();

ReckfellApi.Print(myBasis.X); // Prints (1, 4, 7)
ReckfellApi.Print(myBasis.Y); // Prints (2, 5, 8)
ReckfellApi.Print(myBasis.Z); // Prints (3, 6, 9)
Возвращает Basis

Переносная матрица базы.

op_Equalitybool
# op_Equality
C#
public static bool operator ==(Basis left, Basis right);

Returns (Возврат) true если базовые матрицы являются точно Примечание: Из-за ошибок в точности в плавающей точке рассмотреть вопрос об использовании Basis.IsEqualApprox вместо этого, что более надежно.

Параметры
ИмяТипПо умолчанию
leftBasis—
rightBasis—
left

Левую основу.

right

Правильная основа.

Возвращает bool

Является ли матрица оснований точно равной.

op_Inequalitybool
# op_Inequality
C#
public static bool operator !=(Basis left, Basis right);

Returns (Возврат) true если базовые матрицы не равны. Примечание: Из-за ошибок в точности в плавающей точке рассмотреть вопрос об использовании Basis.IsEqualApprox вместо этого, что более надежно.

Параметры
ИмяТипПо умолчанию
leftBasis—
rightBasis—
left

Левую основу.

right

Правильная основа.

Возвращает bool

Не равны ли базовые матрицы.

op_Multiply3 перегрузки
# op_Multiply · 1/3
C#
public static Basis operator *(Basis left, Basis right);

Составляет эти две базовые матрицы путем их умножения Это приводит к преобразованию второй основы. (ребенка) с первого основания (родителя).

Параметры
ИмяТипПо умолчанию
leftBasis—
rightBasis—
left

Родительская основа.

right

Детская основа.

Возвращает Basis

Составная основа.

# op_Multiply · 2/3
C#
public static Vector3 operator *(Basis basis, Vector3 vector);

Возвращается a Vector3 Преобразован (многократно) в базовую матрицу.

Параметры
ИмяТипПо умолчанию
basisBasis—
vectorVector3—
basis

Применяется матричная трансформация основы.

vector

A Vector3 Преобразовать.

Возвращает Vector3

Преобразованные Vector3.

# op_Multiply · 3/3
C#
public static Vector3 operator *(Vector3 vector, Basis basis);

Возвращается a Vector3 преобразованная (многократно) обратной базовой матрицей, при том предположении, что основа преобразования является ортопедической (т.е. вращение/отражение)

  • в порядке, масштабирование/скайв - нет). vector * basis эквивалентен basis.Transposed() * vectorСм. Basis.Transposed. Преобразование в обратном направлении неортонормальной основы (например, при масштабировании) basis.Inverse() * vector вместо этого можно использовать. См. Basis.Inverse.
Параметры
ИмяТипПо умолчанию
vectorVector3—
basisBasis—
vector

A Vector3 Чтобы обратно преобразоваться.

basis

Применяется матричная трансформация основы.

Возвращает Vector3

Обратно преобразованный вектор.

Поля и константы3

Row0Поле
# Row0
C#
public Vector3 Row0;

Строка 0 матрицы основы. Показывает, какие векторы вносят вклад Строки не очень полезны для кода пользователя, но являются более эффективными для некоторых внутренних расчетов.

Row1Поле
# Row1
C#
public Vector3 Row1;

Строка 1 матрицы основы. Показывает, какие векторы вносят вклад Строки не очень полезны для кода пользователя, но являются более эффективными для некоторых внутренних расчетов.

Row2Поле
# Row2
C#
public Vector3 Row2;

Строка 2 матрицы оснований. Показывает, какие векторы вносят вклад Строки не очень полезны для кода пользователя, но являются более эффективными для некоторых внутренних расчетов.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.