渲染过程中在实现一些贴图或者字符时希望当场景中相机视角发生变化或者物体发生位置变化时,贴图或者字符始终正面朝向屏幕即平面的法线需要始终朝向屏幕,这个问题有两种解决方法
方法一:法向量旋转
需要让平面的法线转向相机和平面中点的方向向量方向如图:
对于复杂的相机物体位置变化显然该方法不是很友好,而且对于多个平面模型使用该方法来管理场景逻辑也会变得复杂,因此我们来看看方法二
方法二:Z值计算
方法二主要是将顶点着色器的计算拿到CPU中来操作,假设我们知道了平面的中心点坐标,坐标值可以根据相机视角变化和模型位置变化而改变,我们将中心坐标变化到屏幕空间中,然后计算出对应的顶点的坐标,且知道了该平面的大小,那我们可以计算出平面(两个三角形)的顶点坐标值x,y,z值,且z值即为该点的深度,我们构建成三角形,直接将坐标点传递给平面的顶点着色器,然后经过像素着色器之后就能够实现平面模型的渲染,这时候你就会发现贴图或者文字会始终朝向屏幕。
另外注意一点,如果需要绘制透明的部分,需要关闭深度测试,然后开启透明混合,等渲染完后再关闭透明混合,开启深度测试,这样做的话深度信息不会错,因为在计算Z值的时候我们就已经计算好深度值了!