自己解决了
最本质的原因是 perspective_to_orthogonal matrix是根据视锥(near plane farplane ….)定义的, 如果对视锥外的点运用这个matrix是没有意义的(只挤压视锥内的点,以此根据写的matrix并不适用于视锥外),结果也是unpredictable的.
为什么会在屏幕上成像呢? 以下为测试后的推测: 我在手动测试了对x视锥外的点运用根据x视锥定义的matrix, 发现很多点在乘以矩阵后,结果会出现在挤压后的长发体内(在视锥另外一个半轴的点会被变换到视锥所在半轴,根据定义的不同位置不同矩阵,有几率会出现在orthogonal那个长方体里)。 长方体内的Objects, points 之后被运用orthogonal matrix, viewport matrix, 最终成像
为什么三角形覆盖关系变了? 根据视锥定义的perspective_to_orthogonal matrix 运用在视锥外的三角形,产生 unexpected result, z值也是非预期结果
实际中应该只对视锥内的points做perspective_to_orthogonal变化