游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1796|回复: 4

BillBoard问题

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-10-19 00:59:00 | 显示全部楼层 |阅读模式
        D3DXMATRIX matBillBoard;
        //根据当前观察方向构造广告板矩阵
        D3DXVECTOR3 vDir = vLookatPt - vEyePt;
        if( vDir.x > 0.0f )
        D3DXMatrixRotationY( &matBillBoard, -atanf(vDir.z/vDir.x)+D3DX_PI/2 );
        else
        D3DXMatrixRotationY( &matBillBoard, -atanf(vDir.z/vDir.x)-D3DX_PI/2 );
        //为树木矩阵乘以广告板矩阵
        g_matTree = matBillBoard*g_matTree;

上面是根据观察方向产生公告牌的旋转矩阵的过程,不过上面旋转的部分我没有看懂,不知道那个旋转的角度是怎么产生的,为什么当vDir.x > 0.0f 的时候旋转角度是-atanf(vDir.z/vDir.x)+D3DX_PI/2,而当vDir.x > 0.0f 的时候旋转角度是-atanf(vDir.z/vDir.x)-D3DX_PI/2哪。
我的理解是atanf(vDir.z/vDir.x)肯定代表视线在水平面上和X轴的夹角(用Q表示),既然是公告板,也就是说公告板的方向肯定是和视线的方向正对着的,也就是180+Q才对啊,这样两个方向才正对着吗,但是事实证明我的是错的,为什么哪?
         [em7]

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-10-19 04:09:00 | 显示全部楼层

Re:BillBoard问题

  1.          Z轴
  2.          |
  3.          |__  <--把这理解成vDir.x,你应该就明白反正切函数计算的意义了吧。
  4.          | /
  5.          |/
  6. ---------+---------->X轴
  7.          |
  8.          |
  9.          |
复制代码

在XY轴构成的平面上。
看明白了后,也就明白了为什么是二分之一PI值,而不是用一个完整的PI值。

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-10-19 09:33:00 | 显示全部楼层

Re:BillBoard问题

还是不明白,那个角度应该是和X轴的夹角才对啊,还有,得到的角度应该是相机的角度,我们把相机的角度反转应该才是公告板的角度才是啊,还请King_jinjing详细说下

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-10-19 14:41:00 | 显示全部楼层

Re:BillBoard问题

你可以把公告板理解成为最初就平行与X轴的,这样只需要跟你做相同的Y轴旋转就达到了始终面对你的公告板效果。

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-10-19 15:18:00 | 显示全部楼层

Re:BillBoard问题

哦,是啊,我怎么把这茬给忘记了,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 03:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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