taontech / githublog

一个基于github issues的博客系统,实时呈现,零依赖,零代码部署,不用打包不用上线。
4 stars 1 forks source link

两种投影矩阵连续的原因 #57

Open taontech opened 1 year ago

taontech commented 1 year ago

投影矩阵和正交投影的生成方法

 static func perspectiveMatrix(fov: Float, aspect: Float, near: Float, far: Float) -> Matrix4 {
        var matrix = Matrix4()
        let f = 1.0 / tanf(fov / 2.0)
        matrix.matrix[0] = f / aspect
        matrix.matrix[5] = f
        matrix.matrix[10] = (far + near) / (near - far)
        matrix.matrix[11] = -1.0
        matrix.matrix[14] = (2.0 * far * near) / (near - far)
        matrix.matrix[15] = 0.0
        return matrix
    }
static func OrthographicMatrix( width:Float,height:Float,near:Float, far:Float ) -> Matrix4 {
        var matrix = Matrix4()
        matrix.matrix[0] = 2.0 / width
        matrix.matrix[5] = 2.0 / height
        matrix.matrix[10] = 1.0 / (far - near)
        matrix.matrix[14] = near / (near - far)
        matrix.matrix[15] = 1.0
        return matrix

    }

由代码可得出,两种投影方式只是用不同的描述参数生成相同数学含义的投影矩阵,所以两种变化是连续的