DirectX视口变换矩阵详解
来源:互联网 发布:动态sql防止sql注入 编辑:程序博客网 时间:2024/05/20 16:40
视口变换在投影变换之后,视口变换的作用是将投影平面上的点转换为屏幕上的点,这是一个缩放的过程。
投影变换的作用是将viewing frustum(视景体)中的场景投影到一个平面上,这个平面就是投影平面,在DirectX中,使用近剪裁平面作为投影平面(z=1),关于透视投影的矩阵求解,请参考透视投影详解
视口变换则是将这个cuboid中的物体变换到视口中,见下图。
其中cuboid的坐标范围是
而viewport的坐标范围是
注:由上图知,视口的起点为(X, Y),宽高分别为Width和Height,x轴向右为正,y轴向下为正,y轴的方向与三维坐标正好相反。视口是一个2D平面,但是在viewport变换中,Z坐标也是跟着变换的,只是在这个图中没有体现。
先求变换矩阵的第一列
Cuboid中的左上角点(-1, 1, 0, 1)映射到viewport中的起点(X, Y, MinZ, 1),
Cuboid中的右上角点(1, 1, 0, 1)映射到viewport中的点(X+Width, Y, MinZ, 1),
假设变换矩阵的第一列为[x’, y’, z’, 1]T据矩阵乘法有
[-1, 1, 0, 1]* [x’, y’, z’, 1]T = X
[1, 1, 0, 1]* [x’, y’, z’, 1]T = X+Width
对应的两个方程为
-1*x’ + 1*y’ + 0*z’ + 1*w’ = X
1*x’ + 1*y’ + 0*z’ + 1*w’ = X+Width
解之得
x’ = Width/2
y’ = 0
z’ = 0
w’ = x + Width/2
再求第二列
列方程(这里省略了x’,z’,但结果不变,下同)
y’ + 1*w’=Y
-1*y’ + 1*w’=Y+Height
解之得
y’ = -Height/2
w’ = Y + Height/2
最后求第三列
列方程
0*z’ + 1*w’ = MinZ
1*z’ + 1*w’ = MaxZ
解之得
z’ = MaxZ – MinZ
w’ = MinZ
组合以上各列,得到视口变换矩阵
- DirectX视口变换矩阵详解
- DirectX视口变换矩阵详解
- DirectX视口变换矩阵详解(推导ViewportMatrix)
- directx中变换矩阵生成算法
- 视口变换矩阵 glviewpoint
- 【OpenGL】OpenGL矩阵变换详解
- OpenGL视点变换,模型变换,投影变换,视口变换详解
- OpenGL视点变换,模型变换,投影变换,视口变换详解
- 视口变换的矩阵求解
- 软件光栅器三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
- 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用
- 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用
- DirectX复合变换
- DirectX SDK 2006学习笔记5——动画和矩阵变换
- 矩阵变换,及其矩阵在DirectX和OpenGL中的应用中的问题:左乘/右乘、行优先/列优先
- 矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...
- 矩阵变换
- 变换矩阵
- 学习C++2 函数篇
- eclipse 插件开发导出jar包到plugin 插件不显示
- spring配置连接池
- 1158 pick numbers
- centos6.3安装rabbitmq实战
- DirectX视口变换矩阵详解
- bootstrap的一些属性问题
- 常用的webservice接口
- [Asm]设置字体样式
- Java 内存溢出详解
- Transaction table及TX锁
- kmp poj 3461
- Test
- C++引用与指针的关系