DirectX视口变换矩阵详解

简介:

视口变换在投影变换之后,视口变换的作用是将投影平面上的点转换为屏幕上的点,这是一个缩放的过程。

投影变换的作用是将viewing frustum(视景体)中的场景投影到一个平面上,这个平面就是投影平面,在DirectX中,使用近剪裁平面作为投影平面(z=1),关于透视投影的矩阵求解,请参考透视投影详解



视口变换则是将这个cuboid中的物体变换到视口中,见下图。


其中
cuboid的坐标范围是

 

viewport的坐标范围是

注:由上图知,视口的起点为(X, Y),宽高分别为WidthHeightx轴向右为正,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

组合以上各列,得到视口变换矩阵

 



本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2009/10/13/1582773.html,如需转载请自行联系原作者

相关文章
|
2月前
【qt】坐标系变换
【qt】坐标系变换
11 0
|
5月前
|
算法 图形学
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
124 2
|
5月前
|
计算机视觉
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
399 0
|
5月前
|
计算机视觉
OpenCV(二十七):图像距离变换
OpenCV(二十七):图像距离变换
52 0
webgl图形变换、投影与摄像机
入坑webgl,从图形变换、投影与摄像机开始,基操学得好,以后才能怎么炫酷怎么来~快快快,点进来~~
webgl图形变换、投影与摄像机
|
图形学
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
1039 0
|
并行计算 iOS开发 MacOS
Metal每日分享,4x4颜色矩阵滤镜效果
Metal每日分享,4x4颜色矩阵滤镜效果
Metal每日分享,4x4颜色矩阵滤镜效果
|
并行计算 iOS开发 MacOS
Metal每日分享,四维向量偏移滤镜效果
Metal每日分享,四维向量偏移滤镜效果
Metal每日分享,四维向量偏移滤镜效果
|
图形学
Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用
Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用
413 1
Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
144 0
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)