三维场景中对于渲染效果不是很精致的物体可以使用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
具体代码如下:
1 mat4 BillboardMatrix() 2 { 3 vec3 look = normalize(centerPosition - worldCameraPos); 4 vec3 right = cross( look, worldCameraUp ); 5 vec3 up = corss(right,look); 6 mat4 result; 7 result[0] = vec4( right, 0.0 ); 8 result[1] = vec4( up, 0.0 ); 9 result[2] = vec4(look, 0.0 );// 10 result[3] = vec4( 0.0, 0.0, 0.0, 1.0 ); 11 return result; 12 }