设为首页 加入收藏

TOP

Unity3D--定义摄像机的投影矩阵
2014-11-24 07:43:30 来源: 作者: 【 】 浏览:1
Tags:Unity3D-- 定义 摄像机 投影 矩阵

Camera.projectionMatrix 投影矩阵


如果你改变这个矩阵,相机的渲染不再基于它的fieldOfView更新,直到调用ResetProjectionMatrix.


只有当真正需要一个非标准的投影时,才使用自定义投影。这个属性被Unity的水渲染使用来设置一个oblique projection 矩阵。使用自定义投影需要了解变换和投影矩阵。


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;
}
public void Awake() {
originalProjection = camera.projectionMatrix;
}
}


可以发现摄像机投影矩阵是个三行四列的矩阵;


//设置一个偏移中心的投影,这个透视的消失点没有必要在屏幕的中心
//定义近载面大小,例如相机的近裁面偏移中心多少
//改变这个值你就能看到相机视图的变化
using UnityEngine;
using System.Collections;


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;
}
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java中Class与Object及反射机制 下一篇Android拍照获得的图片太小

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)