三维场景中对于渲染效果不是很精致的物体可以使用BillBoard技术实现,使用该技术需要将物体实时朝向摄像机,即计算billboard的旋转矩阵M。
首先根据摄像机位置cameraPos和billBoard中心点的坐标centerPos,计算出向量look = centerPos - cameraPos;
然后计算bilboard的向量right = look * cameraUP;
最后计算billboard的向量up = right * look;
最终得到M = mat(right,up,look)。
**注意事项:使用该技术时,首先要关闭深度测试,然后打开混合。
可参考网站:
http://nehe.gamedev.net/article/billboarding_how_to/18011/
http://www.flipcode.com/archives/Billboarding-Excerpt_From_iReal-Time_Renderingi_2E.shtml
具体代码如下:
mat4 BillboardMatrix()
{
vec3 look = normalize(centerPosition - worldCameraPos);
vec3 right = cross( look, worldCameraUp );
vec3 up = corss(right,look);
mat4 result;
result[] = vec4( right, 0.0 );
result[] = vec4( up, 0.0 );
result[] = vec4(look, 0.0 );//
result[] = vec4( 0.0, 0.0, 0.0, 1.0 );
return result;
}