查看: 1507|回复: 5

如何获得viewport既法线?

[复制链接]

该用户从未签到

发表于 2010-2-25 09:03:31 | 显示全部楼层 |阅读模式
请问如何获得viewport既法线呢?

&如何设置billboard,使得无论视角怎样转,都能够看到billboard是正对屏幕呢?

该用户从未签到

发表于 2010-2-25 10:28:06 | 显示全部楼层
使用osg::BillBoard类就可以了,参考osgbillboard和osgforest等例子

该用户从未签到

 楼主| 发表于 2010-2-25 12:54:10 | 显示全部楼层
我的billboard是一个十字线,来表示鼠标位置的,希望做到无论如何移动或改变视角,十字线依然保持对着屏幕。

但osgforest那个例子,假如在billboard上空看的话,会看见树是一个板面,也就是说假如是十字线的话,在上空看会是一条横线,而且osgforest的billboard是一个image,不知道如果不是image或text能否实现。

这是我的理解,不知道有没有错误。希望array能够详细说明,指点实现方法,万分感谢!

该用户从未签到

发表于 2010-2-25 14:10:58 | 显示全部楼层
setMode(POINT_ROT_EYE)就可以了

该用户从未签到

 楼主| 发表于 2010-2-25 15:47:51 | 显示全部楼层
其实我现在就是这样实现的,不过还是有一些问题。
在一般情况下是正常的,但如果转动视图之后,感觉当光标的点在Z=0的平面下的话,会出现异样,就是不是正对屏幕,更有可能会消失。然后切换视图,我的程序是可以切换成left.right.front.back.up.bottom等视图,一旦切换后,光标就不能移动了(只有设置成Billboard才是这样),感觉是只有这几种情况才会这样,稍微转动一下视图,光标又可以移动了。
不知道这是什么原因呢?

该用户从未签到

发表于 2010-2-25 16:21:18 | 显示全部楼层
我无法凭空去判断您的问题,不过这可能和您的场景树结构,以及场景观察矩阵的设置有关。
系统渲染后台每帧都会自动调用Billboard::computeMatrix()来计算广告牌节点所对应的矩阵,这个函数的输入参数是根据当前保存在CullVisitor中的观察矩阵来决定的,如果这个值不正确,那么就不会得到正确的结果。您可以据此来检查自己的代码实现,尤其是“切换成left.right.front.back.up.bottom等视图”的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表