|
||||||||||||||||
|
||||||||||||||||
Camera.projectionMatrix
var projectionMatrix : Matrix4x4DescriptionSet a custom projection matrix. If you change this matrix, the camera no longer updates its rendering based on its fieldOfView. This lasts until you call ResetProjectionMatrix. Use a custom projection only if you really need a non-standard projection. This property is used by Unity's water rendering to setup an oblique projection matrix. Using custom projections requires good knowledge of transformation and projection matrices.
JavaScripts
// Make camera wobble in a funky way!
var originalProjection : Matrix4x4; originalProjection = camera.projectionMatrix; function Update () { var p : Matrix4x4 = originalProjection; // change some values from the original matrix p.m01 += Mathf.Sin (Time.time * 1.2) * 0.1; p.m10 += Mathf.Sin (Time.time * 1.5) * 0.1; camera.projectionMatrix = p; }
using UnityEngine;
using System.Collections; public class example : MonoBehaviour { public Matrix4x4 originalProjection; void Update() { Matrix4x4 p = originalProjection; p.m01 += Mathf.Sin(Time.time * 1.2F) * 0.1F; p.m10 += Mathf.Sin(Time.time * 1.5F) * 0.1F; camera.projectionMatrix = p; } void Awake() { originalProjection = camera.projectionMatrix; } }
import UnityEngine
import System.Collections class example(MonoBehaviour): public originalProjection as Matrix4x4 def Update(): p as Matrix4x4 = originalProjection p.m01 += (Mathf.Sin((Time.time * 1.2F)) * 0.1F) p.m10 += (Mathf.Sin((Time.time * 1.5F)) * 0.1F) camera.projectionMatrix = p def Awake(): originalProjection = camera.projectionMatrix
JavaScripts
// Set an off-center projection, where perspective's vanishing
// point is not necessarily in the center of the screen. // // left/right/top/bottom define near plane size, i.e. // how offset are corners of camera's near plane. // Tweak the values and you can see camera's frustum change. @script ExecuteInEditMode var left : float = -0.2; var right : float = 0.2; var top : float = 0.2; var bottom : float = -0.2; function LateUpdate () { var cam : Camera = camera; var m : Matrix4x4 = PerspectiveOffCenter( left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane ); cam.projectionMatrix = m; } static function PerspectiveOffCenter( left : float, right : float, bottom : float, top : float, near : float, far : float ) : Matrix4x4 { var x : float = (2.0 * near) / (right - left); var y : float = (2.0 * near) / (top - bottom); var a : float = (right + left) / (right - left); var b : float = (top + bottom) / (top - bottom); var c : float = -(far + near) / (far - near); var d : float = -(2.0 * far * near) / (far - near); var e : float = -1.0; var m : Matrix4x4; m[0,0] = x; m[0,1] = 0; m[0,2] = a; m[0,3] = 0; m[1,0] = 0; m[1,1] = y; m[1,2] = b; m[1,3] = 0; m[2,0] = 0; m[2,1] = 0; m[2,2] = c; m[2,3] = d; m[3,0] = 0; m[3,1] = 0; m[3,2] = e; m[3,3] = 0; return m; }
using UnityEngine;
using System.Collections; [ExecuteInEditMode] public class example : MonoBehaviour { public float left = -0.2F; public float right = 0.2F; public float top = 0.2F; public float bottom = -0.2F; void LateUpdate() { Camera cam = camera; Matrix4x4 m = PerspectiveOffCenter(left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane); cam.projectionMatrix = m; } static Matrix4x4 PerspectiveOffCenter(float left, float right, float bottom, float top, float near, float far) { float x = 2.0F * near / right - left; float y = 2.0F * near / top - bottom; float a = right + left / right - left; float b = top + bottom / top - bottom; float c = -far + near / far - near; float d = -2.0F * far * near / far - near; float e = -1.0F; Matrix4x4 m; m[0, 0] = x; m[0, 1] = 0; m[0, 2] = a; m[0, 3] = 0; m[1, 0] = 0; m[1, 1] = y; m[1, 2] = b; m[1, 3] = 0; m[2, 0] = 0; m[2, 1] = 0; m[2, 2] = c; m[2, 3] = d; m[3, 0] = 0; m[3, 1] = 0; m[3, 2] = e; m[3, 3] = 0; return m; } }
import UnityEngine
import System.Collections [ExecuteInEditMode] class example(MonoBehaviour): public left as single = (-0.2F) public right as single = 0.2F public top as single = 0.2F public bottom as single = (-0.2F) def LateUpdate(): cam as Camera = camera m as Matrix4x4 = PerspectiveOffCenter(left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane) cam.projectionMatrix = m static def PerspectiveOffCenter(left as single, right as single, bottom as single, top as single, near as single, far as single) as Matrix4x4: x as single = ((2.0F * near) / (right - left)) y as single = ((2.0F * near) / (top - bottom)) a as single = ((right + left) / (right - left)) b as single = ((top + bottom) / (top - bottom)) c as single = ((-(far + near)) / (far - near)) d as single = ((-((2.0F * far) * near)) / (far - near)) e as single = (-1.0F) m as Matrix4x4 m[0, 0] = x m[0, 1] = 0 m[0, 2] = a m[0, 3] = 0 m[1, 0] = 0 m[1, 1] = y m[1, 2] = b m[1, 3] = 0 m[2, 0] = 0 m[2, 1] = 0 m[2, 2] = c m[2, 3] = d m[3, 0] = 0 m[3, 1] = 0 m[3, 2] = e m[3, 3] = 0 return m |
|
|||||||||||||||