Billboard(广告牌)实现的逐步推导

 广告牌并不是什么令人心动的技术,但我敢说是最实用的技术,
在粒子系统和场景优化方面,起着重要的作用。

下面我用最明了的公式和步骤解释实现的整个过程,
希望对初学者有帮助。

1、获得当前的模型视图矩阵
GLfloat viewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);

2、转置此矩阵就会找到up和right向量
[ m0 m1 m2 m3 ]
[ m4 m5 m6 m7 ]
[ m8 m9 m10 m11]
[ m12 m13 m14 m15]
转置为
[ m0 m4 m8 m12 ]
[ m1 m5 m9 m13 ]
[ m2 m6 m10 m14 ]
[ m3 m7 m11 m15 ]


3、从矩阵中抽取相应的向上和向右矢量(红色部分)
vec3 right(viewMatrix[0], viewMatrix[4], viewMatrix[8]);
vec3 up(viewMatrix[1], viewMatrix[5], viewMatrix[9]);

4、计算新的坐标
newPoint = centerPoint + up * heightScale + right * widthScale;
对于位于中心点的左边的角点,其widthscale值取负,而对于位于中心点
下方的角点,其heightScale应为负值。

5、绘制一个Billboard Quad
//左下角
glTexCoord2f(0.0, 1.0); glVertex3fv(point + (right + up) * -size).v);
//右下角
glTexCoord2f(1.0, 0.0); glVertex3fv(point + (right - up) * size).v);
//右上角
glTexCoord2f(1.0, 1.0); glVertex3fv(point + (right + up) * size).v);
//左上角
glTexCoord2f(0.0, 1.0); glVertex3fv(point + (right - up) * -size).v);

另外对于y轴向的Billboard, 我们只用使它的up vector 等于(0, 1, 0), 就可以了!!

www.azure.com.cn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值