上次我说,解决了 Matrix.PerspectiveFovLH()
的问题,然后提交了 pull request。
后来这个PR被merge了,我很兴奋。直到三天前,我突然收到了来自 GitHub 的自动邮件:
I had to revert this code. As it was breaking all implementations (all MultiCube samples were not correctly rendering)
Could you take some time to check why please?
哇,真是了不得了,初次的PR被revert了!而且说所有的 MultiCube 示例都无法正常渲染了(SharpDX 带两个测试,一个三角形测试一个立方体测试),我这不是捅大篓子了吗?
前两天在研究将反向的结果包装回去,检查两种无法自动对比的代码真心头疼,又想起了这码事,不能让人家等久了,于是开始审查代码。
我想,为什么这代码用了这么久我都没发现问题呢?一看各处应用点,N
为0的地方我都用的是修改的函数,其他地方用的原来的函数。这说明根本没好好测试过嘛!没验证过修改的函数在 N
不等于0时的表现。
然后就发现了,M34
写成了 M44
,而这个矩阵在 N
为0时最后一行刚好全零,完美地规避了元素顺序。这样,上面说的博文中的代码就是错的了。