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方向上的分量,以及在摄像机空间中世界坐标原点的位置。

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表示计算两个向量的数量积。

Matrix.LookAtLH()和Matrix.LookAtRH()所表达的涵义的更多相关文章

  1. Leetcode 54. Spiral Matrix & 59. Spiral Matrix II

    54. Spiral Matrix [Medium] Description Given a matrix of m x n elements (m rows, n columns), return ...

  2. 54. Spiral Matrix && 59. Spiral Matrix II

    Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...

  3. LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)

    给一个矩阵mat,每个格子都是0或1,翻转一个格子会将该格子以及相邻的格子(有共同边)全部翻转(0变为1,1变为0) 求问最少需要翻转几次将所有格子全部置为0. 这题的重点是数据范围,比赛结束看了眼数 ...

  4. 【leetcode】1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix

    题目如下: Given a m x n binary matrix mat. In one step, you can choose one cell and flip it and all the ...

  5. hdu 2686 Matrix && hdu 3367 Matrix Again (最大费用最大流)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  6. Toeplitz matrix 与 Circulant matrix

    之所以专门定义两个新的概念,在于它们特殊的形式,带来的特别的形式. 1. Toeplitz matrix 对角为常数: n×n 的矩阵 A 是 Toepliz 矩阵当且仅当,对于 Ai,j 有: Ai ...

  7. Matrix: android 中的Matrix (android.graphics.Matrix) (转)

    本篇博客主要讲解一下如何处理对一个Bitmap对象进行处理,包括:缩放.旋转.位移.倾斜等.在最后将以一个简单的Demo来演示图片特效的变换. 1. Matrix概述 对于一个图片变换的处理,需要Ma ...

  8. 摄像机distortion vector、project matrix、camera matrix

    关于标定后图像如何校正:http://wiki.ros.org/image_pipeline/CameraInfo ros distortion vector 参数顺序:http://docs.ros ...

  9. uva-442 Matrix Chain Multiplication

    Suppose you have to evaluate an expression like A*B*C*D*E where A,B,C,D and E are matrices. Since ma ...

随机推荐

  1. 事件Qevent的接受和忽略 和重定义 事件过滤器(转)

    转载来源:http://blog.csdn.net/seanyxie/article/details/5821970 事件处理流程:某个事件发生------>exec()循环会接收到这个事件-- ...

  2. 聊聊、AES 和 DES

    AES 和 DES 都是对称加密的一种,但是 DES 的 Key 是 56 位,而 AES 的 Key 有 128,256,512 可选. AES 加密AES String randomKey = & ...

  3. linux中帮助参数 man whatis which info区别?

    在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档: linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们: 在只记 ...

  4. 六、OCP 开闭原则

    OCP原则:“对扩展开放,对修改关闭” 这句话是简述,其实隐藏了重要的主语.真正的意义是:对使用者修改关闭,对提供者扩展开放. 例如: class A 和 class B.A调用了B的一个方法,那么A ...

  5. Android通过onDraw实现在View中绘图操作

    Android绘图操作,通过继承View实现,在onDraw函数中实现绘图. 下面是一个简单的例子: public class AndroidTest extends Activity { /** C ...

  6. Window系统命令行调用控制面板程序

    Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...

  7. 【CF edu 27 G. Shortest Path Problem?】

    time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...

  8. 《c程序设计语言》-3.1 判断语句多少影响时间

    #include <stdio.h> #define Num 1000000 /* int binsearch(int x,int v[],int n) { int low,high,mi ...

  9. python request模板

    # -*- coding: utf-8 -*- import time import requests class Request: def __init__(self): self.s=reques ...

  10. windows 安装 mysql5.7

    1. 搜索“Mysql download”进入官网 或者点击链接 https://dev.mysql.com/downloads/ 进入官网,如下: 2. 下载对应的 MySQL 版本,如下: 点击 ...