Unity 3D相机点投影矩阵

时间:2015-01-14 22:24:21

标签: matrix unity3d camera

简而言之,

我想获得像MOBA游戏一样的相机视图,如果你曾经注意到例如英雄联盟或Dota 2,那么相机不是透视模式,也不是100%正交模式。

(虽然它更接近正字法而不是透视)

例如,如果你开始从A点到B点向左或向右移动相机,你可以看到一些你从A点看不到的不动物(如炮塔)的面,但它仍然保持尺寸并且对象的大小相同,

与正交相机不同,无论您多少次尝试移动相机,都无法看到不动(或移动)物体的另一面。

我希望我很清楚,我知道它必须在矩阵投影中我被告知我需要一个"离轴投影",我不知道它是什么,OpenGL和渲染事物不是我最强的地方。

任何帮助将不胜感激。

这是我使用的脚本,但仍有一些调整:

http://docs.unity3d.com/ScriptReference/Camera-projectionMatrix.html

编辑:

对于剧本:我使用我之前链接的剧本,我没有在这里找到任何新的东西,这就是我在这里的原因。



using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class ExampleClass : 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 = new 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;
    }
}




对于屏幕:当然,将目光聚焦在炮塔上,这是屏幕,因为我没有太多声望,我无法发布图片或超过两个链接,所以 这是一个仅包含图片(4)的保管箱链接。

unity3d environement中的2个, 和英雄联盟相机2,

使用等距相机观察LoL的截图中的炮塔和Unity3d中的支柱,你可以看出这些是使用相同的矩阵,如果我将相机向右移动我可以看到从我以前的立场来看我无法看到的炮塔,这就是我想要达到的效果。

假设每个人都同意英雄联盟正在使用等距相机或至少接近它的东西。

感谢您的时间。

Pictures in dropbox link is here.

0 个答案:

没有答案