什么是viewport?

假设你站在一个密封的房子里,这个房子只有一个很小的窗口,你站在窗口前面,通过这个窗口你可以观察到外面的世界,那么这个窗口就相当于一个视口,而外面的世界就是3D中的场景。
视口有以下几个属性,长度和宽度,为了确定窗口的位置,还需要一个左上角坐标。
为了支持Z-Buffer,还需要两个深度值,分别是zMin, zMax,表示最小深度和最大深度。
这就是视口的定义。

在D3D中,视口用下面的结构体来表示,X和Y表示视口的左上角坐标,Width和Height表示窗口的宽度和高度,MinZ和MaxZ表示Z-buffer的最小值和最大值。

typedef struct D3DVIEWPORT9 {
    DWORD X;
    DWORD Y;
    DWORD Width;
    DWORD Height;
    float MinZ;
    float MaxZ;
} D3DVIEWPORT9, *LPD3DVIEWPORT9;

DirectX视口变换矩阵

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

投影变换的作用是将viewing frustum(视景体)中的场景投影到一个平面上,这个平面就是投影平面,在DirectX中,使用近剪裁平面作为投影平面(z=1),

视口变换则是将这个cuboid中的物体变换到视口中;

其中cuboid的坐标范围是,

而viewport的坐标范围是,

视口变换矩阵,

DirectX 视口学习相关推荐

  1. 我的directX编程学习(4)-坐标变换初步

    这些天对左边变换比较感兴趣.申明,本人对游戏编程没兴趣,只是近体做的项目用了DirectX而已,用了就要懂么!况且坐标变换也挺用脑的,我的大脑已经很久没用了,快锈死了,得动动了. 我的directX编 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  3. DirectX 3D学习笔记(一)

    DirectX 3D学习笔记(一) Ⅰ.渲染状态 设备的渲染状态控制Direct3D设备的光栅化组件的行为.通过改变光栅渲染状态属性,可以设置使用何种方式来进行渲染着色,以及如何进行雾化等. 在Dir ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 原文:Introduction to 3D Game P ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 原文: Int ...

  6. DirectX视口变换矩阵详解

    视口变换在投影变换之后,视口变换的作用是将投影平面上的点转换为屏幕上的点,这是一个缩放的过程. 投影变换的作用是将viewing frustum(视景体)中的场景投影到一个平面上,这个平面就是投影平面 ...

  7. Windows 8 DirectX 开发学习笔记(十六)使用Terragen生成自然环境贴图

    DirectX 游戏编程入门中提到一个Terragen软件可以生成环境贴图,所以登陆它的官方网站看了下.没想到Terragen生成的图片和照片一样,效果非常好,很多电影里有用到,所以下载免费版尝试一下 ...

  8. Windows 8 Directx 开发学习笔记(十一)地形纹理贴图

    前一篇实现木箱贴图时,木箱的六个面都正好用一整张纹理图,即六个面的纹理坐标均在[0,1]内.然而在为比较大的模型贴图时,像山峰河谷模型,如果只用一张纹理图,那么每个三角形只得到几个纹理元素,无法为提供 ...

  9. Windows 8 Directx 开发学习笔记(四)示例程序小结

    VS2012的示例程序包括了最基本的DirectX流程,涉及许多知识,所以看完代码之后还是感觉没有头绪,打算对整个过程再整理一下,方便进一步的学习. 正方体在空间中可以用它的8个顶点定义,而每个顶点可 ...

最新文章

  1. Python模拟赌博实验,赌博为什么能赌到倾家荡产?
  2. c++ 低位在前 高位在后_生意社:醋酸市场前三季度区间震荡 四季度一飞冲天
  3. 062_判断用户输入的是 Yes 或 NO
  4. HDU 2836 (离散化DP+区间优化)
  5. c#中mysql远程连接方法及实例
  6. java多线程总结二:后台线程(守护线程)
  7. window server 安装与卸载
  8. 如何在Outlook 2013中管理附件
  9. 足球预测_预测足球热
  10. java学习(149):字符输入流
  11. python elif可以单独使用_Python的elif语句怎么用
  12. Linux服务器配置和管理:虚拟机安装CentOS6.7
  13. 内存数据集产生的隐性成本
  14. 手机号正则和邮箱正则,常用正则解释
  15. JavaScript逻辑运算与或非
  16. 揭秘有状态服务上 Kubernetes 的核心技术
  17. 软件工程和计算机科学考公务员,软件工程可以考公务员吗
  18. Pega How To系列之一:如何在页面上动态显示/隐藏内容 ----CheneyWang
  19. NBA球员生涯数据统计系统(中南大学C语言课设)
  20. 设备设施管理内容有哪些?

热门文章

  1. uboot中IDE移植
  2. 电脑的cpu是怎么制作的?
  3. Consul 服务注册与发现01——简介|| 安装并运行Consul
  4. arthas-boot.jar 工具的简单使用
  5. Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查
  6. leetCode C++ 二分查找 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
  7. stm32阶段总结笔记一
  8. CTFshow 反序列化 web261
  9. AMESim R14 运行时出现许可证错误
  10. Shell 与Python的交互