码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D Camera透视相机到正交相机插值

时间:2017-05-06 10:12:42      阅读:752      评论:0      收藏:0      [点我收藏+]

标签:main   code   system   res   set   技术   result   size   延迟   

事实上效果并不怎么好,因为延迟光照下的很多效果不支持正交,许多后期效果会炸掉,需要酌情使用

 

通过对投影矩阵进行插值来实现

如果透视相机的远截面和正交相机的远截面差太多,插值时会很奇怪,需要注意。

 

效果:

技术分享

 

代码:

using UnityEngine;
using System.Collections;

public class ProjectionLerp : MonoBehaviour
{
    [Range(0, 0.9f)]
    public float lerp;

    public float nearClip = -0.1f;
    public float size =3f;


    void Update()
    {
        var ratio = Screen.width / (float)Screen.height;

        var a = Matrix4x4.Perspective(45, ratio, 0.1f, 5000f);
        var b = Matrix4x4.Ortho(-size * ratio, size * ratio, -size, size, nearClip, 5000f);

        Camera.main.projectionMatrix = Lerp(a, b, lerp);
    }

    Matrix4x4 Lerp(Matrix4x4 a, Matrix4x4 b, float lerp)
    {
        var result = new Matrix4x4();
        result.SetRow(0, Vector4.Lerp(a.GetRow(0), b.GetRow(0), lerp));
        result.SetRow(1, Vector4.Lerp(a.GetRow(1), b.GetRow(1), lerp));
        result.SetRow(2, Vector4.Lerp(a.GetRow(2), b.GetRow(2), lerp));
        result.SetRow(3, Vector4.Lerp(a.GetRow(3), b.GetRow(3), lerp));

        return result;
    }
}

 

Unity3D Camera透视相机到正交相机插值

标签:main   code   system   res   set   技术   result   size   延迟   

原文地址:http://www.cnblogs.com/hont/p/6815486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!