接口功能:实现光栅化计算。根据给定的三维空间中的点和面,获取屏幕中每个像素点的最小深度及其对应的面片索引,并计算该面片的重心坐标透视矫正插值。
计算公式: 记录每个像素点最小深度对应的面索引,记录每个顶点相对于中记录的面的重心坐标透视矫正插值。 计算过程中使用的zbuffer记录每个像素点的最小深度以及该深度对应的三角形面片索引。
计算过程如下: 对空间中的每个三角形面片:
将的三个顶点坐标, , 转换为屏幕坐标,,
根据,,计算包围的矩形范围
对矩形内每个像素点,执行以下操作:
a. 计算像素中心坐标
b. 计算相对于三角形的重心坐标
c. 根据判断是否在三角形内部。若不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤
d. 使用和,,得到当前像素的深度值depth
e. 若启用了深度先验:- 使用深度先验图计算深度阈值depth_thres
- 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤
f. zbuffer更新:
- 若:
- 若:
按上述步骤对空间中所有的三角形面片进行处理后,对大小为的屏幕上每个像素点:
- 取zbuffer中对应的面片索引,
- 将的三个顶点坐标,,转换为屏幕坐标,,
- 计算的中心点坐标
- 计算相对于三角形的重心坐标
- 使用计算透视矫正插值
以下是涉及的各种具体计算方法:
顶点转换为屏幕坐标
点相对于三角形 的重心坐标
- 分别计算计算三角形 、和的有向面积、和
- 若为0,则, 否则
由顶点, 和组成的三角形的有向面积
结合重心坐标和三角形屏幕坐标, 和计算像素点 的深度
结合深度图,遮挡截断计算点的深度阈值
根据重心坐标判断顶点是否在三角形内 如果且且则点在三角形内(包括在三角形边上),否则点不在三角形内。
结合重心坐标以及三角形的三个顶点坐标, 和计算透视矫正插值
每个算子分为,必须先调用“aclnnRasterizerGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnRasterizer”接口执行计算。
仅支持useDepthPrior为0输入场景,参数dOptional、occlusionTruncation、useDepthPrior在实际计算中不生效。
确定性计算:
- aclnnRasterizer默认确定性实现。