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

投影变换的作用是将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视口变换矩阵详解相关推荐

  1. 图像仿射变换原理3:仿射变换类型及变换矩阵详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...

  2. VC#版DirectX开发入门详解

    一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...

  3. 显卡DirectX技术发展详解

    DirectX是一种应用程序接口(API)是计算机计算图形的一种规则,相当于一个通用编译器. DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Gr ...

  4. DirectX 视口学习

    什么是viewport? 假设你站在一个密封的房子里,这个房子只有一个很小的窗口,你站在窗口前面,通过这个窗口你可以观察到外面的世界,那么这个窗口就相当于一个视口,而外面的世界就是3D中的场景. 视口 ...

  5. OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...

  6. OpenCV-Python图像处理:仿射变换详解及案例

    仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 *图像仿射变换原理2:矩阵变换.线性变换和图像线性变换矩阵 *图像仿射变换原理3:仿射变换类型及变换矩阵详解 ...

  7. 图像仿射变换原理1:齐次坐标来龙去脉详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...

  8. 法线变换详解 和 3D 变换中法向量变换矩阵的推导

    两篇文章 法线变换详解(Normal Transform) 在图形学中,同样的一个模型视图变换矩阵可以用来变换点.线.多边形以及其它几何体,也可以变换多边形表面的切向量.比如: posEyeSpace ...

  9. 【DIRECTX状态详解】

    DIRECT3D状态详解 Microsoft® Direct3D®设备是一个状态机.应用程序设置光照.渲染和变换模块的状态,然后在渲染时传递数据给它们. 本节描述图形流水线用到的所有不同类型的状态. ...

最新文章

  1. 原生php使用foreach,如何使用php中foreach()
  2. JavaScript中的属性:如何遍历属性
  3. DPM(Deformable Parts Model)--原理(一)
  4. 文献记录(part16)--Learning Bayesian Network Classifiers: Searching in a Space of Partially ...
  5. 工业以太网交换机的产品性能有哪些呢?
  6. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
  7. 判断一个无符号整数是不是2的幂
  8. 软件工程第二次作业(原型设计)
  9. 从事前端多年,我是这样看待三大框架的
  10. 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件...
  11. AngularJS开发指南10:AngularJS依赖注入的详解
  12. 如何自定义MATLAB神经网络激活函数
  13. 保研计算机专硕还是学硕,考研怎么选报专硕还是学硕
  14. http://和www.前缀网站有什么区别
  15. 小白学习 指针,指针变量,指针变量大小
  16. Conflux DAO 社区技术委员会成立 助力生态繁荣发展
  17. 【链表】找出直系亲属
  18. 虚拟机、云主机、VPS 三者之间的区别
  19. Facebook POP 进阶指南
  20. java西语_使用Java 8 DateTimeFormatter和西班牙语月份名称进行解析

热门文章

  1. 常用的20个正则表达式
  2. python mvc web_浅谈python_web的MVC和MTV
  3. python学习笔记(九)——文件和异常(重点)
  4. 方舟修改显示服务器个数,方舟生存进化服务器模式设置教程
  5. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
  6. Matlab实用程序--图形应用-图形的叠加
  7. 基于python opencv实现广角相机标定和图像畸变矫正
  8. 如何用catia画半圆_简笔画用半圆画卡通动物
  9. Spring学习12之AOP2
  10. 顺序表应用2:多余元素删除之建表算法