更新文档
This commit is contained in:
+5
-8
@@ -125,7 +125,7 @@
|
||||
|
||||
当前项目已经接入 `Core::DepthBuffer`,并采用以下规则:
|
||||
|
||||
- `DepthBuffer` 存储类型为 `float`
|
||||
- `DepthBuffer` 存储类型为 `float`;`TriangleRasterizer` 内部使用定点深度插值(`depth_fp += depth_fp_per_pixel`,提取时 `>> 16`),内层循环无 float 运算
|
||||
- 每帧开始时必须调用 `depthBuffer->clear()`,默认清为 `INFINITY`
|
||||
- 当前约定为“深度值越小,离相机越近”
|
||||
- 深度测试通过后,必须同时更新 `DepthBuffer` 和 `FrameBuffer`
|
||||
@@ -133,17 +133,14 @@
|
||||
|
||||
当前三角形光栅化里的深度流程为:
|
||||
|
||||
- 在屏幕空间遍历三角形包围盒
|
||||
- 以像素中心 `x + 0.5, y + 0.5` 作为采样点
|
||||
- 用屏幕空间 `x/y` 计算重心坐标
|
||||
- 用同一组重心坐标判断点是否在三角形内,并插值顶点 `z`
|
||||
- 使用增量式整数边缘函数替代每像素 float 重心计算和除法
|
||||
- 深度插值使用定点算术:`depth_fp += depth_fp_per_pixel`,提取时 `>> 16`
|
||||
- 若新深度更近,则写入 `DepthBuffer` 和 `FrameBuffer`
|
||||
|
||||
也就是说:
|
||||
|
||||
- 重心坐标的计算是二维问题,只使用屏幕空间 `x/y`
|
||||
- 顶点 `z` 的插值使用这组重心权重完成
|
||||
- 当前实现是屏幕空间线性插值,后续如果引入纹理、法线或更严格的属性插值,需要进一步考虑透视校正插值
|
||||
- 当前实现已定点化,内层循环无 float 运算,符合 `DEVELOPMENT_GUIDELINES.md` 性能红线
|
||||
- 后续如果引入纹理、法线或更严格的属性插值,需要进一步考虑透视校正插值
|
||||
|
||||
## 10. Demo 中的可见性规则
|
||||
|
||||
|
||||
Reference in New Issue
Block a user