Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
public Matrix4x4 inverse;

Описание

Обратное этой матрицы. (Только чтение)

Перевернутая матрица умножается на исходную и дает единичную матрицу.

Если as-матрица определенным образом преобразует векторы, то обратная матрица может преобразовывать их обратно. Например, Transform worldToLocalMatrix и localToWorldMatrix являются инверсиями друг друга.

Для обычных 3D-матриц трансформации быстрее использовать метод Inverse3DAffine.

Вы не можете инвертировать матрицу с нулевым детерминантом. Если вы попытаетесь это сделать, inverse вместо этого вернет Matrix4x4.zero.

using UnityEngine; // Растягиваем меш под произвольным углом вокруг оси X [RequireComponent(typeof(MeshFilter))] public class ExampleScript : MonoBehaviour { // Угол и величина растяжения public float rotAngle = 30; public float stretch = 3; MeshFilter mf; Vector3[] origVerts; Vector3[] newVerts; void Start() { // Получить компонент фильтра Mesh, сохранить исходные вершины // и делаем новый массив вершин для обработки. mf = GetComponent<MeshFilter>(); origVerts = mf.mesh.vertices; newVerts = new Vector3[origVerts.Length]; } void Update() { // Create a rotation matrix from a QuaternionQuaternion rot = Quaternion.Euler(rotAngle, 0, 0); Matrix4x4 m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one); // Get the inverse of the matrix: undo the rotation Matrix4x4 inv = m.inverse; // For each vertex: for (var i = 0; i < origVerts.Length; i++) { // Rotate the vertex and scale it along its new Y axis Vector3 pt = m.MultiplyPoint3x4(origVerts[i]); pt.y *= stretch; // Return the vertex to its original rotation (but with the // scaling still applied). newVerts[i] = inv.MultiplyPoint3x4(pt); } // Assign the transformed vertices to the mesh mf.mesh.vertices = newVerts; } }

Смотрите так же: Inverse3DAffine, determinant.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3