OpenGL里的代码已经形成和使用了好多年,从程序员的角度,对OpenGL底层代码做升级或修改的实际意义并不大,而且风险高。所以,修改底层算法的想法是有些太狂了。但是,从教学的角度、提供一种新的视角去理解、或者重新再解读前人代码字里行间潜在的、独立于代码作者的理解而存在的深意,应该是值得探讨探讨的。这就是旁观了,观棋不语真君子,实在手痒拿起棋子、自己从头用代码把等价的功能重新实现一遍,或者是可能的。

我记得当年刚学Turbo Pascal /Turbo C 2.0编写几何变换程序的时候,我感觉 “平行投影”、尤其三维空间里向xOyxOyxOy坐标平面的正平行投影是毫无意义、根本不需要存在的,而且我自己也完全没有意识到它存在就已经开始画图了。因为获得三维的点坐标(x,y,z)(x,y,z)(x,y,z)之后,直接从代码里面拿(x,y)(x,y)(x,y)的数据来用就是了,谁还管它投影不投影?头晕不头晕、麻烦不麻烦?

从很多国内搞图形学的研究者们发表的文章里来看,即使认识到齐次坐标和齐次矩阵表示几何变换的重要性和有用性,大家也一直并不严格区分降秩的投影和非降秩的几何变换。所以,概念的理解上至少在不少实用派的人的认识中实际是一直处于混乱状态,但这不意味着所有的人都糊涂。但糊涂的人多了,带着这种糊涂认识的文章,就能够轻松突破同行评审、登上期刊发表,以讹传讹、谬种流传。

不论国内还是国外,搞相关工作的专家,都忙于出看得到的成果,不太在意基础方面谬误的纠正。即使直到最近,2019年,英国一个老头出版的几何变换相关的计算机图形学参考书里面,还在用错误而且笨拙的观念。因为这种现状,让我对图形学很失望。我没有太多专门时间花在这个上面,加上基础并不扎实,所以纠错的声音很小、有时候类似民科的疯狂自我宣传。

国内代数射影几何相关的教学基本被压缩在选修和不修的角落里。看得到的北京师范大学的梅向明等人的《高等几何》已经第三版了,但是,因为局限于师范类大学的数学专业,而且太执着于“几何”本身,这就使得它在工程、图形学、计算机等方面的应用领域里的影响,微乎其微,可以忽略。老的专家已经老去,新的同学又没有开设的相关课程可学,对代数射影几何了解的人会不会出现断层?只剩下各自为政的,执着理论的和专注于实用的两大流派?

但是最近看了math.stackexchange.com上几个人(全是老外)的回答,让我又有了信心了。代数射影几何基础很好、实战经验很强、年轻和学历又好的人,原来还是很多,不只是少数几个很忙的顶级专家。所以,正常发展下去,正确的观点终将一统江湖,当然这需要时间、运气和推动。

一个我20年前就认识到的知识点,根据stereohomology自动借鉴和继承的“三透视”或“三透射”定理、或者可以理解为一种“变换群”,本质上的降秩的投影,可以通过满秩的space elation/ perspective和 再对变形体作降秩投影的复合而实现。这是OpenGL里 GLFrustum() 里的投影矩阵虽然是“满秩”的、但仍然好用的隐藏的理论根据。我感觉当初写代码的人未必真认识到这一点,他们很可能属于前述的“实用派”,否则在官方文档中就不至于语焉不详。这也是为什么程序员们在推导这个矩阵的时候无一不引用“透视投影”或“中心投影”这种原本“降秩”的矩阵操作。实际上降秩的矩阵跟其它矩阵相乘之后,无论如何得到的复合矩阵的秩都不大于这些矩阵因子中最小的秩,怎么可能得到GlFrustum()中类似的满秩矩阵呢?但大家被教的时候教科书编写者就以己昏昏使人昭昭,所以,稀里糊涂能用就行也就正常。


在代码中出现的很多magic number类似,不少应该都有理论依据,有优越性和局限性。但实用脱离系统的理论总结,可能导致某些累积的知识的失传。 我在某美资企业的时候碰到过类似的事情,有一个事关设备标定的算法,因为老工程师退休,新接替的人读文档出现误解,导致同一个设备、同样方法标定,出现巨大的偏差,却发现不了原因(但设备仍然好用)。这是知识传承中的断层。但图形学或计算机领域如此活跃,荟萃了太多精英,应该不会出现这种情况,顶多局部或大面积出问题,而不会把问题出在每一个角落。对人类认识的全体是小问题,对一个公司或局部,可能是理论上看来的本质性的错误。

躲在家里数日不出门,随便发些牢骚。

旁观OpenGL里的透视投影矩阵相关推荐

  1. 【OpenGL】透视投影矩阵推导

    项目场景: 系统:ubuntu glad + glfw + opengl3.3 复习games101MVP变换,在使用OpenGL检验推导透视投影矩阵时,发现得出结果的Z坐标与把不符合目标预期.可以看 ...

  2. Cesium 透视投影矩阵推导

    一.透视投影 透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为.在算 ...

  3. OpenGL 正交、透视投影

    在OpenGL中,如果想对模型进行操作,就要对这个模型的状态(当前的矩阵)乘上这个操作对应的一个矩阵. 如果乘以变换矩阵(平移, 缩放, 旋转), 那相乘之后, 模型的位置被变换; 如果乘以投影矩阵( ...

  4. 【转载+补充】“最简单的” 相机透视投影矩阵推导与解析

    原文链接 作者:大其心宏其量扩其识 链接:https://www.jianshu.com/p/09fef48e7b0f 来源:简书 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ...

  5. 3D数学-裁剪空间与透视投影矩阵的推导

    3D数学-裁剪空间与透视投影矩阵的推导 透视投影矩阵的变换本质,是将视锥体变换到裁剪空间中 视锥体的具有六个面,近裁剪面,远裁剪面,左裁剪面,右裁剪面,上裁剪面,下裁剪面 所有超出视锥体的都会被舍弃, ...

  6. webgl学习之路(三)——透视投影矩阵的推导过程

    关于透视投影矩阵的讲解,网上有不少教程,但是有一点大家基本上都没有讲清楚:就是z轴坐标(这里的Z轴相当于景深)的推导过程,基本上是一笔带过. 下面先从头开始讲推导过程,再慢慢说Z轴的推导过程. 透视投 ...

  7. 图形学中透视投影矩阵推导

    透视投影矩阵是图形学一道重要的坎,他是将世界空间转到屏幕空间,再将屏幕放进裁剪空间ndc映射 我们从侧视图看 我们的已知条件 1.aspect:屏幕宽高比 2.n:近截面z轴坐标 3.f :远截面z轴 ...

  8. 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵

    其实各大矩阵具体的推导过程我就不给出了,我直接给出矩阵具体的形式和实现代码,以及那些大牛推导矩阵详细的文章: 一,世界矩阵(WorldMatrix) 我一般称世界矩阵为SRT矩阵,SRT分别是&quo ...

  9. WebGL入门(二十)-三维视图通过透视投影矩阵创建远小近大的两排三角形

    通过透视投影矩阵创建远小近大的两排三角形 1.demo效果 2.相关知识点 2.1 透视投影 2.2 Matrix4.setPerspective()函数 3. demo代码 1.demo效果 如上, ...

最新文章

  1. python实现字典遍历稳定有序使用collection包OrderedDict
  2. c++ 11 移动语义
  3. 【Android】Activity生命周期
  4. Linux date命令的用法
  5. 后端技术:Java定时任务的五种创建方式
  6. 算术运算导致溢出_CPU的控制器与运算器
  7. 《MySQL——增删改查以及常用语法》
  8. 上传图片自动加水印html,html5上传多个文件并添加水印 实例源码
  9. 什么?print 函数还可以打印彩色围棋局面?
  10. 阿里AI获NLP顶会比赛冠军,达摩院计划推出首个通才型AI医生
  11. Python - 定制pattern的string模板(template) 具体解释
  12. OLAP-ClickHouse-大数据Week13-DAY3-ClickHouse
  13. hdu4504java
  14. pyltp安装教程——保姆级
  15. 5G六大关键技术及未来发展趋势
  16. python中shape用法
  17. 参数估计之矩估计和极大似然估计概述
  18. 虚拟机装ubuntu报错
  19. 测绘资质属于工程资质吗?测绘资质和测量资质有什么区别?
  20. webview的java与js互操作

热门文章

  1. picker多选 vant_Vant Picker 选择器
  2. 【python10个小实验】1. 画一个简单的三角形
  3. 【Echarts】Echarts给title添加背景图片
  4. 计算机打不开网络共享,电脑的网络和共享中心打不开,网络发现又没打开,..._网络编辑_帮考网...
  5. PC版京东炸年兽活动一键做任务 全民自动炸年兽最新版1.1
  6. 全球及中国农药市场需求走势与十四五发展商机研究报告2022版
  7. 第五人格显示服务器错误,第五人格服务器异常玩家秒变GM,时装随便买,玩家:这感觉真好!...
  8. IMT和北京大学微纳电子学研究院持续开展战略合作,三位优秀学生获2017年度MEMS专项奖学金
  9. iOS12.3正式版不能更新是怎么回事(解决办法)
  10. 当贝X3 Pro与极米H5哪个画质好,哪一款更值得购买?