DirectX投影变换矩阵的原理与推导,齐次裁剪空间的应用举例

本文主要是介绍DirectX投影变换矩阵的原理与推导,齐次裁剪空间的应用举例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DirectX Geometry Pipeline的投影变换不是D3DXMatrixShadow或者几何书上的投影变换。
几何书上的投影变换是这样的:

分别是平行投影和透视投影,把空间中的三维物体变成二维平面上的图形。
而DirectX Geometry Pipeline的投影变换是这样的:

上图分别是 Perspective CameraOrthographic Camera 的视景体1(图中的坐标架代表摄像机坐标系),不同的视景体决定了不同的投影类型,常见的是透视投影和正投影。DirectX Geometry Pipeline的投影变换是把视景体都变成DirectX规定的长方体 H(齐次裁剪空间, Normalized Device Coordinates):
这里写图片描述
w>0:2
齐次坐标

P=(x,y,z,w)Hx/w[1,1]y/w[1,1]z/w[0,1]x[w,w]y[w,w]z[0,w]

前者是三维到二维的变换,后者是三维到三维的变换;
后者去掉深度信息(z坐标)就相当于前者;
前者补上深度信息可以得到后者。

Perspective Camera

现在来求 把Perspective Camera的视景体变成DirectX规定的长方体的透视矩阵,
思路是先计算三维到二维的透视投影,再加上深度向量。
这里写图片描述
E是透视投影线的汇聚点,P’ 位于投影平面上,该平面过点Q,法向是N(单位法向量)朝右,
由质点几何易知P’的齐次坐标为 ((PQ)NE+(QE)NP,(PE)N)
深度向量 d=((PQ)NN,0) .

要还原P’的深度信息,只需 把P’的位置坐标加上深度向量d 即可

((PQ)NE+(QE)NP(PE)N,1)+((PQ)NN,0)=

((PQ)NE+(QE)NP(PE)N+(PQ)NN,1)

((PQ)NE+(QE)NP+(PE)N(PQ)NN,(PE)N)

但是因为含有 (PE)N(PQ)NN ,无法写成对 (P,1)的线性变换。这样我们不得不放弃使用真正的深度值了。

深度缓冲区是用来进行深度测试,处理物体的遮挡的。只要能保持相对深度关系,即使不是真正的深度值也没有关系。
如果我们把P’的齐次坐标和深度向量 d 直接相加:

((PQ)NE+(QE)NP

这篇关于DirectX投影变换矩阵的原理与推导,齐次裁剪空间的应用举例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236956

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维