教程地址
学习记录
在透视投影(3D投影)中,我们所能看到的区域根本上来看很像是一个锥形。如下:
如图,E 是我们的摄像机位置,摄像机所能观察到的角度则是我们的 FOV ,近截面和远截面则是我们最近和最远所能看到的平面。我们的透视投影矩阵便是拿这些数据来构造:
1 | XMMatrixPerspectiveFovLH( fov , width / height , near , far); |
所以我们的可视区域则是这个锥形体的内部部分。在这个视锥之外的物体则不会被渲染,一般情况下我们将所有要渲染的顶点传入 GPU ,GPU将会检查是否可见,如果不可见将会被剔除。但是将这个任务交给 GPU 的话其效率确实很低。假设我们有渲染数千个物体,而只有十几个是可见的,那么我们需要将数千个物体的顶点信息传递给 GPU 并在渲染时判断,这无疑的十分浪费资源的。因此我们需要在传递数据之前进行判断这个模型是否在我们的视锥体之内,如果没有那么干脆不去发送它。