织梦CMS - 轻松建站从此开始!

罗索

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

落鹤生 发布于 2010-05-25 10:33 点击:次 
广告牌并不是什么令人心动的技术,但我敢说是最实用的技术, 在粒子系统和场景优化方面,起着重要的作用。 下面我用最明了的公式和步骤解释实现的整个过程, 希望对初学者有帮助。
TAG:

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

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

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

(azure)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201005/9482.html]
本文出处:CSDN博客 作者:azure
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容