快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: cpu占用多过30%会被你的用户扔砖。










最近更新:
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(15:12:45)
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(10:01:38)
● DDM君阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(19:07:43)
浏览主题:如何拉动camera到一个合适的位置,使得场景中所有物体全部被显示?

如何拉动camera到一个合适的位置,使得场景中所有物体全部被显示?
ericvan76 (2009-07-01 14:01:27)

如题





flash 3d 研究所
(2009-07-01 14:48:39)
呀。。。这。。。这只能靠慢慢调整啦。
专业一点的方法是三维软件里把位置记录下来等等


另外如果是用的FlabCamera3D的话,fov这个选项也是可以调整的哟(就是真实相机的广交)


flash 3d 研究所
(2009-07-01 14:54:04)
那么通过什么办法可以判断?
比如说我有一个物体,怎么判断它当前在viewport中?还是不在viewport中?或者是只有一部分在?


flash 3d 研究所
(2009-07-01 14:58:22)
其实我要实现一个 Fit All 的效果,不管场景里的东西多大或者多小(camera 远近),只要“Fit All“,camera就会自动移到适当的位置,使得该物体正好撑满整个屏幕。


flash 3d 研究所
(2009-07-01 15:30:15)
我的思路是:
先把该物体各顶点的二维坐标求出来,取最大最小值,得到一个二维的Rectangle,然后再和viewport的Rectangle作比较。

但是似乎三维转二维坐标有问题,我先calculateScreenCoords(),然后得到的screen都是“0,0,0”,很是奇怪,不知道哪里出了问题?


flash 3d 研究所
(2009-07-01 16:49:21)
感觉ericvan君的思路不对啦,fit不fit只和camera有关,而camera是三维,也就根本不需要转换为二维。

应该是这样的,首先要计算出camera的梯形(三维的),然后把场景中所有物体的AABB(物体简化后的8顶点盒子)过一遍,然后得出这里面作为整个世界的AABB的8个极端顶点,然后判断时候都处于camera中,是要不是的话,则camera继续向后退,直到大AABB全部在camera的梯形(三维的)里出现位置。


flash 3d 研究所
(2009-07-02 04:27:51)

1. 算出所有物体的总AABB,进而以此AABB的(Max - Min) / 2的长度为半径得到一个Bounding Sphere.

2. 易得到,如果投下所有物体,视锥的左右两个面必须为Bounding Sphere的切面。 然后就可以利用已知的BoundingSphere的半径,FOV,利用三角函数求的摄像机距离球心的偏移量。

3. 以球心为观察点,V圆心 - (V观察方向 * L)求得摄像机位置, 更新摄像机。



flash 3d 研究所
(2009-07-02 09:52:22)
sexy君果然专业的手法,极强,效率显然要高得多。


to ericvan76君:上面这个就是图形之神的指示哦~被亲自指导一次是很不容易的^_^


flash 3d 研究所
(2009-07-05 07:33:32)
问题解决了。
多谢楼上两位啦,真是荣幸。


flash 3d 研究所
(2009-07-05 12:48:16)
如果能介绍一下大概解决方法更好哦~呵呵 继续加油!


flash 3d 研究所
(2009-07-06 14:33:26)
还是我原来的思路,找出总AABB,然后投射到二维坐标,得到外围的Rectangle,把这个Rectangle和viewport的sizeRectangle做比较。

Z君的办法也很不错,不过我还没时间试,等有空了再试试。


flash 3d 研究所
(2009-07-07 09:24:19)
噢,不错不错呀,也是非常有创造力的思路呢!


评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了