zoukankan      html  css  js  c++  java
  • Matrix.LookAtLH()和Matrix.LookAtRH()所表达的涵义

    function lookAtLH(eye:Vector3D, at:Vector3D, up:Vector3D)

    一个摄像机矩阵可有由三个部分组成:摄像机位置、目标位置以及摄像机上下方。对应的就是上面方法的三个参数。这三个参数都为空间向量(Vector3)。

    在形成视图矩阵过程中,如下图所示。

    以摄像机位置为起点、摄像机目标位置为终点的单位向量作为摄像机空间的Z’轴坐标(相对于世界空间)。Z’轴坐标和摄像机上下方向的向量构成一个平面Z’U’。

    然后根据左手法则或右手法则计算出摄像机空间的X’轴坐标,X’坐标和平面Z’U’垂直。

    Z’和X’构成向量Z’X’,最后计算出摄像机空间的Y’轴坐标,Y’垂直于平面Z’X’。

    所以视图矩阵中保存摄像机空间X’、Y’和Z’轴坐标在X、Y和Z方向上的分量,以及在摄像机空间中世界坐标原点的位置。

    image

    public static Matrix LookAtLH( Vector3cameraPosition, Vector3 cameraTarget, Vector3cameraUpVector);

    其中参数cameraPosition用于指定摄像机位置,参数cameraTarget用于指定摄像机目标位置,参数cameraUpVector用于指定当前世界坐标向上的方向,一般为(0,1,0)。

    根据前面介绍的原理则可计算出视图空间各坐标轴的向量,如下:

    cameraZaxis = Normalize(cameraTarget-cameraPosition)

    cameraXaxis = Normalize(Cross(cameraUpVector, cameraZaxis))

    cameraYaxis = Cross(cameraZaxis, cameraXaxis)

    其中Normalize表示计算向量的单位向量, Cross表示计算两个向量的向量积。对应于视图矩阵中各个元素的值为:

    cameraXaxis.X    cameraYaxis.X    cameraZaxis.X    0

    cameraXaxis.Y    cameraYaxis.Y    cameraZaxis.Y    0

    cameraXaxis.Z    cameraYaxis.Z    cameraZaxis.Z    0

    DXY            DYP            DZP            1

    其中:

    DXY = -Dot(cameraXaxis,cameraPosition)

    DYP = -Dot(cameraYaxis, cameraPosition)

    DZP = -Dot(cameraZaxis, cameraPosition)

    Dot表示计算两个向量的数量积。

  • 相关阅读:
    2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest
    2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
    BZOJ5104 : Fib数列
    2017-2018 ACM-ICPC Southeast Regional Contest (Div. 1)
    2017 ACM Jordanian Collegiate Programming Contest
    BZOJ4910 : [Sdoi2017] 苹果树
    2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)
    BZOJ4912 : [Sdoi2017]天才黑客
    BZOJ4739 : 定向越野
    概率笔记11——一维正态分布的最大似然估计
  • 原文地址:https://www.cnblogs.com/hisiqi/p/3160579.html
Copyright © 2011-2022 走看看