【GAMES101】作业2中三角形上下颠倒问题最简单的解决方法
·
今天在做作业1的时候发现渲染出来的三角形总是上下颠倒的,如图:

造成这个问题的原因是:课程提供的源代码框架有问题
在原框架中有一句设置投影矩阵的代码:
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));
//第一个参数45表示可视角度为45°
//第二个参数1表示近平面宽高比为1
//第三个参数0.1表示近平面到原点的距离为0.1
//第四个参数50表示远平面到原点的距离为50
注意这里的第三个参数0.1和第四个参数50都表示的是绝对值距离
再来看一看课件中关于projection矩阵的推导:

这里是按照三角形相似来推导的,注意这里的z和n的符号必须要是一致的,也就是说要么z和n都看成有正负值的坐标(即使两个负数,除完还是正数)还是绝对值距离(只能取正值)都是可以的,因为只需要保证出来的n/z是一个正数就不会发生坐标反转(即三角形上下颠倒问题)。
于是矛盾出现了,前面的调用代码中:
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));
n=0.1,f=50显然是按照绝对值距离来约定的,但是在projection矩阵形成过程中的z却始终代入的是一个有符号数,但是显然修改调用函数的代码比修改projection矩阵的形成的源代码要更好,因此要解决上下颠倒问题,只需要将上面的代码改成:
r.set_projection(get_projection_matrix(45, 1, -0.1, -50));
统一了标准,即可解决问题,下面是修改代码后的输出结果:

更多推荐



所有评论(0)