游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6758|回复: 7

opengl里实现billboard的简单方法

[复制链接]

9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2005-8-18 16:22:00 | 显示全部楼层 |阅读模式
opengl里实现billboard的简单方法:


VOID BillBoard()
{
//用来保存一个4*4的矩阵
float m[16];

//取得当前的模型矩阵,并保存到数组m中
glGetFloatv(GL_MODELVIEW_MATRIX,m);

//用m矩阵的部分参数画一个方形平面
glBegin(GL_QUADS);
glVertex3f(-(m[0]+m[1]),-(m[4]+m[5]),-(m[8]+m[9]));
glVertex3f(m[0]-m[1],m[4]-m[5],m[8]-m[9]);
glVertex3f(m[0]+m[1],m[4]+m[5],m[8]+m[9]);
glVertex3f(m[1]-m[0],m[5]-m[4],m[9]-m[8]);
glEnd();
}

在渲染函数里调用BillBoard();当观察方向改变时你会发现
方形平面始终将一面朝向你.为了说明问题已将代码最简化,
要实现其它的功能可在此基础上扩展代码.


9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2005-8-18 18:41:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

不是画粒子,我画了一个四方形平面,当你在场景中走动的时候,这个四方形平面始终将一个面朝向你.当然可以在这个四方形平面上再画粒子或其它什么东西.

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2005-8-18 20:17:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

这个我推导过了。
基本就是求逆.
你这个东西刚好是ModelView矩阵是个正交矩阵的情况...是个特例

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-8-18 20:41:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

ModelVIew矩阵转置就是他的逆。。确实是特例

2

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2005-8-19 10:02:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

我记得Billboarding Tutorial中介绍ViewMatrix的逆矩阵就是他的转置.
我验证过,没遇到过什么问题.....

2

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2005-8-19 10:19:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

啊,又看了下Tutorial,
是If you're only using gluLookAt to perform you're camera movements, or just doing translations and rotations to the camera, then M1 is orthogonal. If, on the other hand you mess around with the modelview matrix then you may end up with M1 not being orthogonal.

后面不是正交矩阵的条件我不明白.......

另,为什么一定要用逆矩阵求billboard?用camera_position减去object_position,up设恒向上,通过叉乘求出right,然后在up和right方向建立四边形.这种方法有什么缺点吗?


8

主题

91

帖子

93

积分

注册会员

Rank: 2

积分
93
发表于 2005-8-19 13:28:00 | 显示全部楼层

Re:opengl里实现billboard的简单方法

我是用mythology的方法建的。楼主的这种方法有缺陷。没有初始matrix非正交阵的情况,而非正交阵是非常普遍的。

9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2005-8-21 00:59:00 | 显示全部楼层

Re: Re:opengl里实现billboard的简单方法

[quote]
mythology: Repengl里实现billboard的简单方法

老实说我对矩阵并不理解只知道使用,这个是我在glLookat..里用的一个billboard,没想到还有这么多缺陷.谢谢大家批评指正.

mythology说的方法是在镜头前蒙上一片玻璃,这片玻璃会随以镜头为轴转动.感觉和我这里的billboard还是有点区别.我画的四方形平面是绕一个轴自转不是绕镜头公转.不知是否如此.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 11:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表