DirectX视口变换矩阵详解
视口变换在投影变换之后,视口变换的作用是将投影平面上的点转换为屏幕上的点,这是一个缩放的过程。
投影变换的作用是将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
组合以上各列,得到视口变换矩阵
本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2009/10/13/1582773.html,如需转载请自行联系原作者
DirectX视口变换矩阵详解相关推荐
- 图像仿射变换原理3:仿射变换类型及变换矩阵详解
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...
- VC#版DirectX开发入门详解
一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...
- 显卡DirectX技术发展详解
DirectX是一种应用程序接口(API)是计算机计算图形的一种规则,相当于一个通用编译器. DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Gr ...
- DirectX 视口学习
什么是viewport? 假设你站在一个密封的房子里,这个房子只有一个很小的窗口,你站在窗口前面,通过这个窗口你可以观察到外面的世界,那么这个窗口就相当于一个视口,而外面的世界就是3D中的场景. 视口 ...
- OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...
- OpenCV-Python图像处理:仿射变换详解及案例
仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 *图像仿射变换原理2:矩阵变换.线性变换和图像线性变换矩阵 *图像仿射变换原理3:仿射变换类型及变换矩阵详解 ...
- 图像仿射变换原理1:齐次坐标来龙去脉详解
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...
- 法线变换详解 和 3D 变换中法向量变换矩阵的推导
两篇文章 法线变换详解(Normal Transform) 在图形学中,同样的一个模型视图变换矩阵可以用来变换点.线.多边形以及其它几何体,也可以变换多边形表面的切向量.比如: posEyeSpace ...
- 【DIRECTX状态详解】
DIRECT3D状态详解 Microsoft® Direct3D®设备是一个状态机.应用程序设置光照.渲染和变换模块的状态,然后在渲染时传递数据给它们. 本节描述图形流水线用到的所有不同类型的状态. ...
最新文章
- 原生php使用foreach,如何使用php中foreach()
- JavaScript中的属性:如何遍历属性
- DPM(Deformable Parts Model)--原理(一)
- 文献记录(part16)--Learning Bayesian Network Classifiers: Searching in a Space of Partially ...
- 工业以太网交换机的产品性能有哪些呢?
- Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
- 判断一个无符号整数是不是2的幂
- 软件工程第二次作业(原型设计)
- 从事前端多年,我是这样看待三大框架的
- 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件...
- AngularJS开发指南10:AngularJS依赖注入的详解
- 如何自定义MATLAB神经网络激活函数
- 保研计算机专硕还是学硕,考研怎么选报专硕还是学硕
- http://和www.前缀网站有什么区别
- 小白学习 指针,指针变量,指针变量大小
- Conflux DAO 社区技术委员会成立 助力生态繁荣发展
- 【链表】找出直系亲属
- 虚拟机、云主机、VPS 三者之间的区别
- Facebook POP 进阶指南
- java西语_使用Java 8 DateTimeFormatter和西班牙语月份名称进行解析