关于 2.2 软光栅渲染器渲染结果问题

会出现这样的问题
图片

有一些部分是黑色的没有渲染成功 这是哪里出了问题呢

感觉像是某些地方的点最后的 color 值计算有些问题,同学可以输出一下自己中间计算过程中的某些数据看一看,感觉有些值好像算成 0 了

这是精度问题吗 有一根线不太对
图片
当移动整体的 z 值是发现渲染结果正确

这是精度问题吗 有一根线不太对

图中那条线上都是黑色或白色,所以我也赞成 roland 的思路,应该是深度而非着色出问题了。

要验证这个猜想,你可以考虑在 render 函数的最后直接将 z-buffer 的值归一化并作为灰度复制到 color buffer 中(也就是 RGB 分量都设置为深度值),输出一张深度图,然后看看深度图上是否也有一条过渡不平滑的线。

如果深度图也不正常,那你就可以大致定位一下不正确的图像区域,然后通过加条件(特定的屏幕坐标范围)输出日志的方式检查这个区域里深度被更新的过程,进而试图找到深度算错的片元是怎么回事。如果深度图正常,那你可以试着取消光栅化器按照重心坐标差值法线的操作,直接取顶点平均值作为面片上所有片元的法向,再去排查着色的问题。