我正在解决一个计算机视觉问题,需要使用已校准的相机渲染三维模型。我正在编写一个函数,将校准相机矩阵分解成模型视图矩阵和投影矩阵,但是我在OpenGL中遇到了一个有趣的现象,这种现象无法被我解释清楚。
简要描述是:取反投影矩阵会导致无法呈现任何东西(至少在我的经验中是这样)。 我本来以为通过任何标量乘以投影矩阵都不会产生影响,因为它转换齐次坐标,并且齐次坐标不受缩放影响。
以下是我认为这个现象出乎意料的原因;也许有人能指出我的推理有哪些错误。
想象以下透视投影矩阵,它可以给出正确结果:
谢谢!
简要描述是:取反投影矩阵会导致无法呈现任何东西(至少在我的经验中是这样)。 我本来以为通过任何标量乘以投影矩阵都不会产生影响,因为它转换齐次坐标,并且齐次坐标不受缩放影响。
以下是我认为这个现象出乎意料的原因;也许有人能指出我的推理有哪些错误。
想象以下透视投影矩阵,它可以给出正确结果:
[ a b c 0 ]
P = [ 0 d e 0 ]
[ 0 0 f g ]
[ 0 0 h 0 ]
将这个乘以摄像机坐标可以得到齐次裁剪坐标:
[x_c] [ a b c 0 ] [X_e]
[y_c] = [ 0 d e 0 ] * [Y_e]
[z_c] [ 0 0 f g ] [Z_e]
[w_c] [ 0 0 h 0 ] [W_e]
最后,为了得到规范化的设备坐标,我们将x_c、y_c和z_c除以w_c:
[x_n] [x_c/w_c]
[y_n] = [y_c/w_c]
[z_n] [z_c/w_c]
现在,如果我们否定P,结果的剪辑坐标应该被否定,但由于它们是齐次坐标,乘以任何标量(例如-1)不应对结果的标准化设备坐标产生任何影响。 但是,在openGl中,否定P导致什么也没有渲染。 我可以将P乘以任何非负标量并获得完全相同的渲染结果,但一旦我乘以负标量,就不会渲染任何内容。 这里到底发生了什么??谢谢!