Super_DT
@Super_DT
Super_DT
@Super_DT
Basic User
Joined October 9, 2023
Last Active 997 days ago
-
这也是一个花了我很久时间的问题,我一开始怀疑是用插值的法线会产生一些精度问题,这可能会导致不应该出现的多次迭代,我当时认为可能是法线的精度问题导致对交点进行加上 eps 矫正的时候使得交点反而在内表面而产生错误的迭代(比如单纯渲染一个任何参数都保持默认的 cube,交点被判断在了 cube 内,光线可能就会在 cube 内反复迭代)。不过这只能解释出现过暗的情况,我在使用插值的法线时也会出现奇怪的高光部分,我用 cube 实验的时候有些 kr 极度趋近于 1,这说明相机发出的光线与交点处法线接近垂直,而我设置的单光源和相机的位置是 222,理论上不应该出现这种接近垂直的情况。后来我输出 cube 的顶点法线(由 mesh.normal 调用得到,世界坐标系),很多法线并不是 001 并且有一定差距;而面片的法线是由顶点坐标计算而来,所以是正确的 001。
使用 cube 正确法线进行渲染的结果

使用 cube 插值得到的法线进行渲染的结果(也即 2.2 的结果)

cube 的 obj 文件

我并没有在 obj 文件中找到法线的数据,至于为什么 obj 文件没有法线数据却能直接得到顶点法线,我也不清楚。Post #2 -
可以看 light.h,遍历 lights 列表就可以了
Post #3