质疑有关透视投影矩阵的推导

hunterzone 2015-07-20 04:52:27
对参数为(l,r,b,t,n,f)的透视投影矩阵的推导,我有几点疑问,我认为它转换的话应该是先进行(-(r+l)/2, -(t+b)/2, 0)平移,然后再做透视投影。这样得到的透视投影矩阵是:

但是<real time rendering.pdf>上的推导式是:

我在网上也找了几篇透视投影矩阵的推导,感觉比较牵强或者是我还不能接受这种推导方式,Twinsen的深入探索透视投影变换Deriving Projection Matrices
我想知道我的推导思路有什么问题?请各位有经验的指点一下,感激不尽。
...全文
905 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunterzone 2015-07-23
  • 打赏
  • 举报
回复
这个问题我终于解决了,有兴趣的可以看我的博客:透视矩阵的推导(最直观、最深度、最还原,看完请点赞。)
hunterzone 2015-07-22
  • 打赏
  • 举报
回复
引用 33 楼 prfans1 的回复:
以前推导过一次,感觉最终结果符号有差异。
书《3D Graphics for Game Programming》中由fovy,aspect,n,f参数定义的透视投影矩阵的推导,讲得非常详细,不过可惜的是它没讲由l,r,b,t,n,f参数定义的透视投影矩阵的推导,这个推导很不常规,《real time rendering》也没给出这个的推导,还得好好研究。。。
prfans1 2015-07-22
  • 打赏
  • 举报
回复
以前推导过一次,感觉最终结果符号有差异。
彩阳 2015-07-21
  • 打赏
  • 举报
回复
我也不清楚你为什么做平移。我以前也推导过这个公式,并且写了博客。 深度缓存(Z缓存)的研究 你可以参考看看。
zxx43 2015-07-21
  • 打赏
  • 举报
回复
问题是从视图空间到投影空间根本就没有平移操作啊,平移是在视口变换的时候做的.
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
这个问题只理论推导估计没有效果,我最近在实现大场景模型的漫游器,等我把这个应用上去了再验证一下我的推导是不是有问题,暂时保留疑问。
zxx43 2015-07-21
  • 打赏
  • 举报
回复
引用 30 楼 hunter_wwq 的回复:
[quote=引用 28 楼 zxx43 的回复:] [quote=引用 26 楼 hunter_wwq 的回复:] [quote=引用 25 楼 hunter_wwq 的回复:] [quote=引用 23 楼 zxx43 的回复:] 这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.
l,r,t,b都是对应的x轴和y轴上的坐标,假如l≠-r,t≠b,那么它的中心位置怎么会与z轴重合呢?[/quote] 写错了,假如l≠-r,t≠-b,那么它的中心位置怎么会与z轴重合呢?[/quote] 想象一下近裁剪面是这样,只要把 l r t b 分别对应到-1和1 就变成了cvv[/quote] 那么问题来了,我先把近裁剪平面的中心位置平移到z轴上,再将lrtb对应到-1和1,这样不也可以变成cvv了吗。[/quote] 这样是可以,问题是opengl不这么做,glFrustum用的是我给的那张图上的坐标系,你写的矩阵是用的你自定义的坐标系,你用你的东西去质疑opengl就像拿opengl和directx矩阵比较一样
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
引用 28 楼 zxx43 的回复:
[quote=引用 26 楼 hunter_wwq 的回复:] [quote=引用 25 楼 hunter_wwq 的回复:] [quote=引用 23 楼 zxx43 的回复:] 这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.
l,r,t,b都是对应的x轴和y轴上的坐标,假如l≠-r,t≠b,那么它的中心位置怎么会与z轴重合呢?[/quote] 写错了,假如l≠-r,t≠-b,那么它的中心位置怎么会与z轴重合呢?[/quote] 想象一下近裁剪面是这样,只要把 l r t b 分别对应到-1和1 就变成了cvv[/quote] 那么问题来了,我先把近裁剪平面的中心位置平移到z轴上,再将lrtb对应到-1和1,这样不也可以变成cvv了吗。
zxx43 2015-07-21
  • 打赏
  • 举报
回复
还有这边是坐标系中心,坐标系中心不是裁剪面中心
zxx43 2015-07-21
  • 打赏
  • 举报
回复
引用 26 楼 hunter_wwq 的回复:
[quote=引用 25 楼 hunter_wwq 的回复:]
[quote=引用 23 楼 zxx43 的回复:]

这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.

l,r,t,b都是对应的x轴和y轴上的坐标,假如l≠-r,t≠b,那么它的中心位置怎么会与z轴重合呢?[/quote]
写错了,假如l≠-r,t≠-b,那么它的中心位置怎么会与z轴重合呢?[/quote]

想象一下近裁剪面是这样,只要把 l r t b 分别对应到-1和1 就变成了cvv
zxx43 2015-07-21
  • 打赏
  • 举报
回复
opengl的透视投影矩阵不用做上下左右平移,因为做完视景变换以后的坐标系中心就是和z轴重合的,估计是设计者图个方便,api就这么定,觉得不爽可以自己改.
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
引用 25 楼 hunter_wwq 的回复:
[quote=引用 23 楼 zxx43 的回复:] 这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.
l,r,t,b都是对应的x轴和y轴上的坐标,假如l≠-r,t≠b,那么它的中心位置怎么会与z轴重合呢?[/quote] 写错了,假如l≠-r,t≠-b,那么它的中心位置怎么会与z轴重合呢?
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
引用 23 楼 zxx43 的回复:
这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.
l,r,t,b都是对应的x轴和y轴上的坐标,假如l≠-r,t≠b,那么它的中心位置怎么会与z轴重合呢?
zxx43 2015-07-21
  • 打赏
  • 举报
回复

这个里的 l r t b 都可以取不同的值,但是中心是和z轴重合的,不用做上下左右的平移,你给的情况是对正交矩阵的操作,不相干.
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
正交投影用的是缩放,透视投影运用的时相似三角形原理做的,但是在这之前的一步我认为是需要将定义的视锥体的中心平移到z轴上。
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
引用 21 楼 zxx43 的回复:
但是正交矩阵推导和透视矩阵推导不一样啊
我知道不完全一样,我把那一页贴出来是jiangcaiyang123说“权威OpenGL文档上也没有这个步骤啊。有这个步骤的给我一个链接,我看看。”
zxx43 2015-07-21
  • 打赏
  • 举报
回复
但是正交矩阵推导和透视矩阵推导不一样啊
zxx43 2015-07-21
  • 打赏
  • 举报
回复
这再次说明你弄混了.
hunterzone 2015-07-21
  • 打赏
  • 举报
回复
引用 18 楼 zxx43 的回复:
rtr的这页说的是正交投影
这个是正交矩阵没问题,这一页讲的是正交矩阵的推导,先平移再进行缩放。
zxx43 2015-07-21
  • 打赏
  • 举报
回复
rtr的这页说的是正交投影
加载更多回复(15)
*AI学习知识点* 1. 基础知识 概率论 微积分与逼近论 极限、微分、积分的基本概念 利用逼近的思想理解微积分,利用积分的方式理解概率论 概率论的基础 古典模型 常见的概率分布 大数定理和中心极限定理 协方差和相关系数 最大似然估计和最大后验估计 凸优化 凸优化的基本概念 凸函数 凸集 凸优化问题的标准形式 线性代数及矩阵 线性空间及线性变化 矩阵的基本概念 状态转移矩阵 特征向量 矩阵的相关乘法 矩阵的QR分解 对称矩阵、正交矩阵、正定矩阵 矩阵的SVD分解 矩阵的求导 矩阵的映射和投影 数据分析 常数e gini系数 导数 梯度 梯度下降 信息熵与组合数 Taylor 牛顿法 2. Python高级应用 容器 列表:list 元组:tuple 字典:dict 数组:Array 切片 列表推导式 浅拷贝和深拷贝 函数 lambda表达式 递归函数及递归优化 常用内置函数/高级函数 项目案例: 约瑟夫环问题 常用库 时间库 并发库 科学计算库 Matplotlib可视化会图库 锁和线程 多线程变成 3. 机器学习 机器学习 理论概述 督导学习 逻辑回归 Softmax分类 条件随机场 支持向量机svm 决策树 随机森林 GBDT 集成学习 非督导学习 高斯混合模型 聚类 PCA 密度估计 LDA 双聚类 降维算法 LSI 数据处理与模型调优 特征提取 数据预处理 数据降维 模型参数调优 模型持久化 模型可视化 优化算法:坐标轴下降法和最小角回归法 数据挖掘关联规则算法 感激模型 4. 深度学习 迈入人工智能的大门 深度学习概述 感知器 BP神经网络 RBF神经网络 Tensorflow概述 Tensorflow常用api Tensorboard可视化技术 源码实现BP与RBF 机器能看的现代技术-CNN 初识CNN 模型优化技术 CNN经典模型 机器能读懂文字的技术-RNN 初识RNN 走进LSTM 机器能伪造数据的技术-GAN 走进GAN 损失函数原理解析 GAN变种 深度学习进阶 目标检测(ssd,yolo) seq2seq seq2seq with Attension 5. 自然语言处理 词 分词 词性标注 词向量 字向量 实体识别 关系抽取 关键词提取 无用词过滤 句 句法分析 语义分析 自然语言 理解 一阶逻辑 文本相似度计算 7. 图像处理 图像基础 图像读写、保存、画图 图像操作及算数运算 图像像素读取、算数运算、ROI区域读取 图像颜色空间运算 图像颜色空间相互转换 图像集合变化 平移、旋转、仿射变化、透视变化等 图像形态学 腐蚀、膨胀、开闭运算等 图像轮毂 长宽、面积、周长、外方园、方向、平均颜色、层次轮图 图像统计学 图像直方图 图像滤波 高斯滤波、均值滤波、双边滤波、拉普拉斯滤波 1. 基础知识 概率论 微积分与逼近论 极限、微分、积分的基本概念 利用逼近的思想理解微积分,利用积分的方式理解概率论 概率论的基础 古典模型 常见的概率分布 大数定理和中心极限定理 协方差和相关系数 最大似然估计和最大后验估计 凸优化 凸优化的基本概念 凸函数 凸集 凸优化问题的标准形式 线性代数及矩阵 线性空间及线性变化 矩阵的基本概念 状态转移矩阵 特征向量 矩阵的相关乘法 矩阵的QR分解 对称矩阵、正交矩阵、正定矩阵 矩阵的SVD分解 矩阵的求导 矩阵的映射和投影 数据分析 常数e gini系数 导数 梯度 梯度下降 信息熵与组合数 Taylor 牛顿法 2. Python高级应用 容器 列表:list 元组:tuple 字典:dict 数组:Array 切片 列表推导式 浅拷贝和深拷贝 函数 lambda表达式 递归函数及递归优化 常用内置函数/高级函数 项目案例: 约瑟夫环问题 常用库 时间库 并发库 科学计算库 Matplotlib可视化会图库 锁和线程 多线程变成 3. 机器学习 机器学习 理论概述 督导学习 逻辑回归 Softmax分类 条件随机场 支持向量机svm 决策树 随机森林 GBDT 集成学习 非督导学习 高斯混合模型 聚类 PCA 密度估计 LDA 双聚类 降维算法 LSI 数据处理与模型调优 特征提取 数据预处理 数据降维 模型参数调优 模型持久化 模型可视化 优化算法:坐标轴下降法和最小角回归法 数据挖掘关联规则算法 感激模型 4. 深度学习 迈入人工智能的大门 深度学习概述 感知器 BP神经网络 RBF神经网络 Tensorflow概述 Tensorflow常用api Tensorboard可视化技术 源码实现BP与RBF 机器能看的现代技术-CNN 初识CNN 模型优化技术 CNN经典模型 机器能读懂文字的技术-RNN 初识RNN 走进LSTM 机器能伪造数据的技术-GAN 走进GAN 损失函数原理解析 GAN变种 深度学习进阶 目标检测(ssd,yolo) seq2seq seq2seq with Attension 5. 自然语言处理 词 分词 词性标注 词向量 字向量 实体识别 关系抽取 关键词提取 无用词过滤 句 句法分析 语义分析 自然语言 理解 一阶逻辑 文本相似度计算 7. 图像处理 图像基础 图像读写、保存、画图 图像操作及算数运算 图像像素读取、算数运算、ROI区域读取 图像颜色空间运算 图像颜色空间相互转换 图像集合变化 平移、旋转、仿射变化、透视变化等 图像形态学 腐蚀、膨胀、开闭运算等 图像轮毂 长宽、面积、周长、外方园、方向、平均颜色、层次轮图 图像统计学 图像直方图 图像滤波 高斯滤波、均值滤波、双边滤波、拉普拉斯滤波

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧