Version: 5.3 (switch to 5.4b)
IdiomaEnglish
  • C#
  • JS

Idioma de script

Selecciona tu lenguaje de programación favorito. Todos los fragmentos de código serán mostrados en este lenguaje.

Matrix4x4.inverse

Sugiere un cambio

¡Éxito!

Gracias por ayudarnos a mejorar la calidad de la documentación de Unity. A pesar de que no podemos aceptar todas las sugerencias, leemos cada cambio propuesto por nuestros usuarios y actualizaremos los que sean aplicables.

Cerrar

No se puedo enviar

Por alguna razón su cambio sugerido no pudo ser enviado. Por favor <a>intente nuevamente</a> en unos minutos. Gracias por tomarse un tiempo para ayudarnos a mejorar la calidad de la documentación de Unity.

Cerrar

Cancelar

Cambiar al Manual
public var inverse: Matrix4x4;
public Matrix4x4 inverse;

Descripción

The inverse of this matrix (Read Only).

Inverted matrix is such that if multiplied by the original would result ¿Es la matriz de identidad?

If some matrix transforms vectors in a particular way, then the inverse matrix can transform them back. For example, Transform's worldToLocalMatrix and localToWorldMatrix are inverses of each other.

	// Stretch a mesh at an arbitrary angle around the X axis.
	
	// Angle and amount of stretching.
	var rotAngle: float;
	var stretch: float;
	
	
	private var mf: MeshFilter;
	private var origVerts: Vector3[];
	private var newVerts: Vector3[];
	
	
	function Start () {
		// Get the Mesh Filter component, save its original vertices
		// and make a new vertex array for processing.
		mf = GetComponent.<MeshFilter>();
		origVerts = mf.mesh.vertices;
		newVerts = new Vector3[origVerts.Length];
	}
	
	
	function Update () {
		// Create a rotation matrix from a Quaternion.
		var rot = Quaternion.Euler(rotAngle, 0, 0);
		var m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one);
		
		// Get the inverse of the matrix (ie, to undo the rotation).
		var 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.
			var 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);
		}
		
		// Copy the transformed vertices back to the mesh.
		mf.mesh.vertices = newVerts;
	}
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public float rotAngle; public float stretch; private MeshFilter mf; private Vector3[] origVerts; private Vector3[] newVerts; void Start() { mf = GetComponent<MeshFilter>(); origVerts = mf.mesh.vertices; newVerts = new Vector3[origVerts.Length]; } void Update() { Quaternion rot = Quaternion.Euler(rotAngle, 0, 0); Matrix4x4 m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one); Matrix4x4 inv = m.inverse; int i = 0; while (i < origVerts.Length) { Vector3 pt = m.MultiplyPoint3x4(origVerts[i]); pt.y *= stretch; newVerts[i] = inv.MultiplyPoint3x4(pt); i++; } mf.mesh.vertices = newVerts; } }