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. 【LeetCode】Swap Nodes in Pairs(两两交换链表中的节点)

    这是LeetCode里的第24题. 题目要求: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定1->2->3->4, 你应该返回2->1->4- ...

  2. leetcode 149. 直线上最多的点数 解题报告

    给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +------- ...

  3. UTXO是什么?

    以易于理解的方式解释了比特币交易中的"UTXO" UTXO 2017年11月1日 让我们看看当你发一点硬币时会发生什么. 比特币交易通过UTXO执行.通过在比特硬币的所有交易中新生 ...

  4. BATCH梯度下降,单变量线性回归

  5. SSM之秒杀系统

    利用idea搭建SSM框架,主要利用Maven仓库下载相应的jar包,以下是相关的pom.xml <project xmlns="http://maven.apache.org/POM ...

  6. 201621123034 《Java程序设计》第6周学习总结

    作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...

  7. kvm竟然抓不到kvm的tracepoint

    今天终于把kvm给搭起来了,打开了host机的tracepoint竟然一个都没有抓到,这是咋回事? 难道kvm的东西只有在启动的时候才会被抓到? 虚拟出来一块内存一块CPU,虚拟出来一个内存.感觉都好 ...

  8. rxjs的世界

    rxjs学习了几个月了,看了大量的东西,在理解Observable的本文借鉴的是渔夫的故事,原文,知识的主线以<深入浅出rxjs>为主,动图借鉴了rxjs中文社区翻译的文章和国外的一个动图 ...

  9. 少年Pi的奇幻漂流

    选择怀疑作为生活哲学就像选择静止作为交通方式.   的确,我们遇见的人可能改变我们,有时候改变如此深刻,在那之后我们成了完全不同的人,甚至我们的名字都不一样了. 声音会消失,但伤害却留了下来,像小便蒸 ...

  10. 【转】oracle 删除重复记录

    转至:http://blog.163.com/aner_rui/blog/static/12131232820105901451809/ 2.保留一条(这个应该是大多数人所需要的 ^_^) Delet ...