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

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

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

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

效果:

代码:

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;
    }
}
时间: 2024-10-27 12:31:18

Unity3D Camera透视相机到正交相机插值的相关文章

Libgdx之正交相机 OrthographicCamera

本翻译自Libgdx Wiki 本文主要介绍OrthographicCamera相机类和用法.OrthographicCamera是正交相机,用在2D游戏开发中,无论游戏物体放在游戏世界中的那个位置,用正交相机看到的物体都不会被缩放. 描述 正交相机的操作非常简单,就像我们在现实世界中操作相机一样,文章中主要介绍: 相机的移动和旋转 相机的放到和缩小 改变相机的视窗大小 在窗口(widow)坐标系和(世界)坐标系之间切换点的位置 使用正交相机可以在不必去操作矩阵的情况下非常方便的来移动游戏世界,

Android调用系统相机、自定义相机、处理大图片

Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人SurfaceView出现黑屏的原因. Android应用拍照的两种方式,下面为两种形式的Demo展示出来的效果.    知识点: 一.调用系统自带的相机应用 二.自定义我们自己的拍照界面 三.关于计算机解析图片原理(如何正确加载图片到Android应用中) 所需

unity, 相机空间 与 相机gameObject的局部空间

在unity里 相机空间 与 相机gameObject的局部空间 不重合. Camera.worldToCameraMatrix的文档中有这样一句话: Note that camera space matches OpenGL convention: camera's forward is the negative Z axis. This is different from Unity's convention, where forward is the positive Z axis. 意思

Unity3d Camera

简单总结下:  先上图 假设现在有三个摄像机.我们的视野为 1*1 的正方形. 也就说如果我们需要在一个屏幕内需要同时显示三个摄像机的视野,需要瓜分我们的1*1的屏幕.  如图每个摄像机的坐标都取左下的定点.即可完成分屏.   在赛车游戏中会用到小窗口. 这个时候 也是按照左边去分1*1的屏幕. 需要注意的是 小窗口的Depth必须大于大窗口的Depth.关于天空盒子,设置方法如下 在camera中设置天空盒子,值得注意的是每一个camera都有自己的天空盒子 在窗体Render中选择渲染天空盒

有关默认相机转VR相机

呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混乱,中间加了个中英文版本的适配. fn cam_to_vrcam sel:#off del:#on = ( local sel_cam = #() local del_cam = #() case sel of ( #off : cams = cameras #on : cams = sel_cam

线阵相机与面阵相机的区别

线阵相机 主要应用于工业.医疗.科研与安全领域的图象处理. 在机器视觉领域中,线阵相机是一类特殊的视觉机器.与面阵相机相比,它的传感器只有一行感光元素,因此使高扫描频率和高分辨率成为可能.线阵相机的典型应用领域是检测连续的材料,例如金属.塑料.纸和纤维等.被检测的物体通常匀速运动 , 利用一台或多台相机对其逐行连续扫描 , 以达到对其整个表面均匀检测.可以对其图象一行一行进行处理 , 或者对由多行组成的面阵图象进行处理.另外线阵相机非常适合测量场合,这要归功于传感器的高分辨率 , 它可以准确测量

Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段落,又是新一月,上月主要是围绕MediaPlayer相关展开,从今天开始,开始分析多媒体框架中的Camera模块,看下今天的Agenda: Camera拍照 Camera录像 新API android.hardware.camera2 新旧API特点对比 Camera自定义相机 新API andro

Unity3D:透视与正交

Camera 的 Projection:投射方式 Perspective:透视.摄像机将用透视的方式来渲染游戏对象.物体会根据距离收缩,运小近大,类似与人眼. Field of view:视野范围.用于控制摄像机的视角宽度以及纵向的角度尺寸. Orthographic:正交.摄像机将用无透视的方式来渲染游戏对象.物体不会根据距离收缩. Size:大小.用于控制正交模式摄像机的视口大小.

正交相机下实现滚轮按钮拖动,滚动滚轮缩放的功能

实现了一个功能,鼠标滚轮键按下可以拖动视野内的物体全体(其实是相机自己在移动),滚动滚轮可以缩放内容(其实是改变相机视野大小) 效果如下 代码奉上 1 using UnityEngine; 2 using UnityEngine.UI; 3 4 /// <summary> 5 /// 挂载在主相机上 6 /// </summary> 7 public class Cont : MonoBehaviour 8 { 9 private new Camera camera; 10 pri