测验:法线与光照
朗伯漫反射中若从 max(0, dot(n, l)) 去掉 max,会发生什么?
- 亮度计算稍快,结果几乎相同
- 背光面亮度变为负数,颜色反转或溢出
- 所有表面亮度固定为 1,看起来扁平
- 背光面会自动产生阴影
为什么需要 ambient 项?
- 匹配物理上准确的光强
- 粗略补偿反弹光,避免背光面完全变黑
- 吸收法线归一化误差
- 弥补深度缓冲精度
用模型矩阵变换法向量时,为什么把 w 设为 0?
- 跳过归一化
- 法线表示方向,不应应用平移
- 忽略矩阵第三行
- 减少浮点误差
面法线(每个面一个)与顶点法线(插值)的区别,以下哪项正确?
- 面法线产生棱角分明的外观,插值法线产生平滑曲面
- 面法线不需要光照计算
- 顶点法线可以代替深度缓冲
- 只有三角形很多时才能使用面法线
应受光的面很暗、背光面反而很亮时,首先检查哪里?
- ambient 值是否过大
- 深度缓冲初值是否错误
- 三角形顶点绕序是否反转,使法线指向内部
- 相机 near 平面是否过小
制作旋转动画时,为什么不逐帧累乘旋转矩阵,而是保存角度状态并重新生成矩阵?
- 矩阵乘法比三角函数慢得多,会增加帧耗时
- 一个角度比矩阵的 16 个分量占用更少内存
- 累乘会积累浮点误差,破坏正交性并使物体变形
- 旋转矩阵相乘后不再是旋转矩阵