用矩阵旋转相机

modelMatOfCamera=inverse(veiwMat)

newModelMatOfCamera=modelMatOfCamera*rotMat,这里注意rotMat要右乘modelMatOfCamera,因为我们想在相机的局部空间里旋转相机(即原地扭头),而不是想在世界空间旋转相机(让相机绕着世界原点转)。

则可得新的视图矩阵为:

newViewMat=inverse(newModelMatOfCamera)

或者也可以计算新的up,eye和center:

newUp=secondColOf(newModelMatOfCamera)

newRight=firstColOf(newModelMatOfCamera)

newDir=-thirdColOf(newModelMatOfCamera)

newEyePos=oldEyePos,即eyePos保持不变

newCenter=newEyePos+newDir

这样就得到了newUp,newEyePos和newCenter

----

注意,相机的viewMat即相机modelMat的逆矩阵。

由相机的modelMat各列可直接提取出相机空间轴向量和相机位置坐标。

由相机的viewMat各行可以提取出相机的空间轴向量(第四个元素要强制变为0),但是不能直接提取出相机的位置坐标。

参考:http://user.qzone.qq.com/350479720/blog/1310061051

时间: 2024-12-21 04:36:06

用矩阵旋转相机的相关文章

HDU 4772 Zhuge Liang's Password (矩阵旋转)

Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 931    Accepted Submission(s): 641 Problem Description In the ancient three kingdom period, Zhuge Liang was the most famous

O(1)空间复杂度实现n*n矩阵旋转90度

O(1)空间复杂度实现n*n矩阵旋转90度, #include <iostream> using namespace std; #define ARRAY_SIZE 5 void print_two_array (int a[][ARRAY_SIZE]) { cout << endl;    for (int i=0; i<ARRAY_SIZE; i++) { for (int j=0; j<ARRAY_SIZE; j++) {    cout << a[i

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

2018 Multi-University Training Contest 4 Problem J. Let Sudoku Rotate 【DFS+剪枝+矩阵旋转】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6341 Problem J. Let Sudoku Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1363    Accepted Submission(s): 717 Problem Description Sudoku i

二维数组(矩阵)之将矩阵旋转90度

将矩阵旋转90度: 题目描述: 例如将一个5*5的矩阵顺时针旋转90度:旋转前 1       2        3         4         5 6       7        8         9        10 11    12      13      14       15 16    17      18      19       20 21    22      23      24       25 选转后: 21     16      11       6

leetcode之图片(矩阵)旋转

题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Follow up: Could you do this in-place? 思路: 题目的关键在in-place,否则就太容易了,为了达到in-place只能使用常熟变量的空间,通过类似两变量交换的方式进行多变量循环轮转,即a->b,b->c,c->a这种那个形式(->代表赋

CC150:将一个矩阵旋转90度

一张图像表示成n X n的矩阵,写一个函数把图像旋转90度.不开辟额外的存储空间 我们假设要将图像逆时针旋转90度.原图如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 逆时针旋转90度后的图应该是: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 我们要如何原地进行操作以达到上面的效果呢?可以分两步 第一步交换主对角线两侧的对称元素, 第二步交换第i行和第n-1-i行,即得到结果. 看图示: 原图:           第一

矩阵旋转90度

初始化矩阵 void initial_square_matrix(int * * * pm, int n) { pm[0] = new int *[n]; for (int i = 0; i < n; i++) { pm[0][i] = new int[n]; for (int j = 0; j < n; j++) pm[0][i][j] = i * n + j + 1; } } 销毁矩阵 void destroy_square_matrix(int * * * pm, int n) { fo

【LeetCode】【矩阵旋转】Rotate Image

描述 You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Note: You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do