Transform3D
3×4 матриця, що представляє трансформацію 3D.
Опис
Transform3D вбудований Variant тип 3 × 4 матриця, що представляє трансформацію в простір 3D. Він містить Basis, який на власній може представити обертання, масштаб і зсув. Крім того, в поєднанні з власним origin, трансформ також може представляти переклад.
Для загального впровадження див. Matrices і трансформатори підручник.
Примітка: Godot використовує right-handed координатна система, яка є загальним стандартом. Для напрямків, конвенції для вбудованих типів, таких як Camera3D, для -Z до точки вперед (+X справа, +Y вгору, і +Z назад). Інші об'єкти можуть використовувати різні напрямки. Для отримання додаткової інформації див. 3D Конвенції напрямку активу підручник.
Примітка
Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.
Посібники
Властивості
|
||
|
Конструктори
Transform3D(from: Transform3D) |
|
Transform3D(basis: Basis, origin: Vector3) |
|
Transform3D(from: Projection) |
|
Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3) |
Методи
affine_inverse() const |
|
interpolate_with(xform: Transform3D, weight: float) const |
|
inverse() const |
|
is_equal_approx(xform: Transform3D) const |
|
is_finite() const |
|
looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const |
|
orthonormalized() const |
|
rotated_local(axis: Vector3, angle: float) const |
|
scaled_local(scale: Vector3) const |
|
translated(offset: Vector3) const |
|
translated_local(offset: Vector3) const |
Оператори
operator !=(right: Transform3D) |
|
operator *(right: AABB) |
|
operator *(right: PackedVector3Array) |
|
operator *(right: Plane) |
|
operator *(right: Transform3D) |
|
operator *(right: Vector3) |
|
operator *(right: float) |
|
operator *(right: int) |
|
operator /(right: float) |
|
operator /(right: int) |
|
operator ==(right: Transform3D) |
Константи
IDENTITY = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
Тотожність Transform3D. Це перетворення без переміщення, без обертання та з масштабом Vector3.ONE. Його basis дорівнює Basis.IDENTITY. Це також означає, що:
Його Basis.x вказує праворуч (Vector3.RIGHT);
Його Basis.y вказує вгору (Vector3.UP);
Його Basis.z вказує назад (Vector3.BACK).
var transform = Transform3D.IDENTITY
var basis = transform.basis
print("| X | Y | Z | Походження")
print("| %.f | %.f | %.f | %.f" % [basis.x.x, basis.y.x, basis.z.x, transform.origin.x])
print("| %.f | %.f | %.f | %.f" % [basis.x.y, basis.y.y, basis.z.y, transform.origin.y])
print("| %.f | %.f | %.f | %.f" % [basis.x.z, basis.y.z, basis.z.z, transform.origin.z])
# Виводить:
# | X | Y | Z | Походження
# | 1 | 0 | 0 | 0
# | 0 | 1 | 0 | 0
# | 0 | 0 | 1 | 0
Якщо Vector3, AABB, Plane, PackedVector3Array або інший Transform3D перетворюється (множиться) на цю константу, перетворення не відбувається.
Примітка: У GDScript ця константа еквівалентна створенню Transform3D без будь-яких аргументів. Її можна використовувати для того, щоб зробити ваш код зрозумілішим та для узгодженості з C#.
FLIP_X = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
Transform3D з дзеркальним відображенням, застосованим перпендикулярно до площини YZ. Його basis дорівнює Basis.FLIP_X.
FLIP_Y = Transform3D(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0) 🔗
Transform3D з дзеркалами наноситься перпендикулярно до площини XZ. Його basis дорівнює Basis. FLIP_Y.
FLIP_Z = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0) 🔗
Transform3D з дзеркалами наноситься перпендикулярно до площини XY. Його basis дорівнює Basis.FLIP_Z.
Описи властивостей
Basis basis = Basis(1, 0, 0, 0, 1, 0, 0, 0, 1) 🔗
Basis цього перетворення. Вона складається з 3 осей (Basis.x, Basis.y, і Basis.z). Разом вони представляють обертання, масштаб та зсув перетворення.
Vector3 origin = Vector3(0, 0, 0) 🔗
Переклад цього перетворення. У 3D-просторі це можна побачити як позицію.
Описи конструкторів
Transform3D Transform3D() 🔗
Створює Transform3D, ідентичний IDENTITY.
Примітка: У C# це створює Transform3D із origin і компонентами його basis, встановленим у Vector3.ZERO.
Transform3D Transform3D(from: Transform3D)
Конструює Transform3D як копію заданого Transform3D.
Transform3D Transform3D(basis: Basis, origin: Vector3)
Конструює Transform3D з Basis та Vector3.
Transform3D Transform3D(from: Projection)
Створює Transform3D з Projection. Оскільки Transform3D — це матриця 3×4, а Projection — матриця 4×4, ця операція обрізає останній рядок матриці проекцій (from.x.w, from.y.w, from.z.w та from.w.w не включені до нового перетворення).
Transform3D Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3)
Constructs a Transform3D з чотирьох Vector3 значення (також називається матриці стовпчиків).
Перші три аргументи — ось basis (Basis.x, Basis.y, і Basis.z).
Описи методів
Transform3D affine_inverse() const 🔗
Повертає інвертовану версію цього перетворення. На відміну від inverse(), цей метод працює майже з будь-яким basis, включно з неоднорідними, але повільніше. Дивіться також Basis.inverse().
Примітка: Щоб цей метод повертав належні результати, база-член перетворення повинна мати визначник, який не є точно 0.0 (див. Basis.determinant()).
Transform3D interpolate_with(xform: Transform3D, weight: float) const 🔗
Повертає результат лінійної інтерполяції між цим перетворенням і xform за заданим weight.
weight має бути між 0.0 і 1.0 (включно). Значення за межами цього діапазону дозволені, і натомість їх можна використовувати для екстраполяції.
Transform3D inverse() const 🔗
Повертає інвертовану версію цього перетворення. Дивіться також Basis.inverse().
Примітка: Щоб цей метод повертав належним чином, базис-член перетворення має бути ортонормованим (див. orthonormalized()). Це означає, що основа повинна представляти лише обертання. Якщо це не так, замість цього використовуйте affine_inverse().
bool is_equal_approx(xform: Transform3D) const 🔗
Повертає true, якщо це перетворення і xform є приблизно рівні, запустивши @GlobalScope.is_equal_about() на кожному компоненті.
Повертає true, якщо це перетворення скінченно, викликаючи @GlobalScope.is_finite() на кожному компоненті.
Transform3D looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const 🔗
Повертає копію цього перетворення, повернуту так, що вісь вперед (-Z) вказує на позицію target.
Вісь вгору (+Y) вказує якомога ближче до вектора up, залишаючись перпендикулярною до осі вперед. Отримане перетворення ортонормується. Існуюча інформація про обертання, масштаб та нахил з початкового перетворення відкидається. Вектори target та up не можуть бути нульовими, не можуть бути паралельними один одному та визначені в глобальному/батьківському просторі.
Якщо use_model_front має значення true, вісь +Z (спереду ресурсу) розглядається як вперед (мається на увазі, що +X ліворуч) та вказує на позицію target. За замовчуванням вісь -Z (вперед камери) розглядається як вперед (мається на увазі, що +X праворуч).
Transform3D orthonormalized() const 🔗
Повертає копію цього перетворення з ортонормованим basis. Ортонормований базис є як ортогональним (осі перпендикулярні одна до одної), так і нормованим (осі мають довжину 1.0), що також означає, що він може представляти лише обертання. Дивіться також Basis.orthonormalized().
Transform3D rotated(axis: Vector3, angle: float) const 🔗
Повертає копію цього перетворення, повернуту навколо заданої axis на заданий angle (у радіанах).
axis має бути нормалізованим вектором (див. Vector3.normalized()). Якщо angle додатний, базис обертається проти годинникової стрілки навколо осі.
Цей метод є оптимізованою версією множення заданого перетворення X на відповідне перетворення обертання R зліва, тобто R * X.
Це можна розглядати як трансформацію щодо глобального/батьківського кадру.
Transform3D rotated_local(axis: Vector3, angle: float) const 🔗
Повертає копію цього перетворення, повернуту навколо заданої axis на заданий angle (у радіанах).
axis має бути нормалізованим вектором у локальній системі координат перетворення. Наприклад, щоб обертати навколо локальної осі X, використовуйте Vector3.RIGHT.
Цей метод є оптимізованою версією множення заданого перетворення X на відповідне перетворення обертання R справа, тобто X * R.
Це можна розглядати як трансформацію відносно локальної рамки.
Transform3D scaled(scale: Vector3) const 🔗
Повертає копію цього трансформаційного вагового коефіцієнта scale.
Цей метод є оптимізованим варіантом помноження даної трансформації X з відповідним перетворенням масштабування S з лівого, тобто S * X.
Це може бути перетворена з точки зору глобального/парентного каркасу.
Transform3D scaled_local(scale: Vector3) const 🔗
Повертає копію цього трансформаційного вагового коефіцієнта scale.
Цей метод є оптимізованим варіантом помноження даної трансформації X з відповідним перетворенням масштабування S з правого, тобто X * S.
Це можна побачити як перетворювати по відношенню до локального каркасу.
Transform3D translated(offset: Vector3) const 🔗
Повертає копію цього перетворення, що перекладається з вказаного offset.
Цей метод є оптимізованим варіантом розмноження даної трансформації X з відповідним перекладом T з лівого, тобто T * X.
Це може бути перетворена з точки зору глобального/парентного каркасу.
Transform3D translated_local(offset: Vector3) const 🔗
Повертає копію цього перетворення, що перекладається з вказаного offset.
Цей метод є оптимізованим варіантом розмноження даної трансформації X з відповідним перекладом T з правого, тобто X * T.
Це можна побачити як перетворювати по відношенню до локального каркасу.
Описи операторів
bool operator !=(right: Transform3D) 🔗
Повертаємо true, якщо компоненти обох трансформаторів не рівні.
Примітка: У зв'язку з похибками з плаваючою точкою, розглянемо використання is_equal_approx() замість того, яка є більш надійним.
AABB operator *(right: AABB) 🔗
Трансформи (multiplies) AABB за допомогою цієї матриці перетворення.
PackedVector3Array operator *(right: PackedVector3Array) 🔗
Трансформи (multiplies) кожен Vector3 елемент даної PackedVector3Array за допомогою цієї матриці перетворення.
На більших масивах ця операція набагато швидше, ніж перетворення кожного Vector3 індивідуально.
Plane operator *(right: Plane) 🔗
Трансформи (multiplies) Plane цієї матриці перетворення.
Transform3D operator *(right: Transform3D) 🔗
Перетворює (множить) це перетворення на перетворення right.
Це операція, що виконується між батьківським та дочірнім Node3D.
Примітка: Якщо вам потрібно змінити лише один атрибут цього перетворення, розгляньте можливість використання одного з наступних методів:
Щодо перетворення див. translated() або translated_local().
Щодо обертання див. rotated() або rotated_local().
Щодо масштабування див. scaled() або scaled_local().
Vector3 operator *(right: Vector3) 🔗
Vector3 за допомогою цієї матриці перетворення.
Transform3D operator *(right: float) 🔗
Множить всі компоненти Transform3D на задане float, включаючи origin. This рівномірно впливає на масштаб перетворення, масштабуючи basis.
Transform3D operator *(right: int) 🔗
Багатофункціональні всі компоненти Transform3D заданими int, включаючи origin. Це впливає на шкалу трансформатора рівномірно, масштабування basis.
Transform3D operator /(right: float) 🔗
Дивиди всі компоненти Трансформ3D, в тому числі origin. Це впливає на шкалу трансформатора рівномірно, масштабування basis.
Transform3D operator /(right: int) 🔗
Дивиди всі компоненти Трансформ3D, в тому числі origin. Це впливає на шкалу трансформатора рівномірно, масштабування basis.
bool operator ==(right: Transform3D) 🔗
Повертає true, якщо компоненти обох перетворень абсолютно рівні.
Примітка: Через помилки точності чисел з плаваючою комою, розгляньте можливість використання is_equal_approx() замість цього, що є більш реалістичним.