 |
(2009-07-01 14:48:39) |
呀。。。这。。。这只能靠慢慢调整啦。 专业一点的方法是三维软件里把位置记录下来等等
另外如果是用的FlabCamera3D的话,fov这个选项也是可以调整的哟(就是真实相机的广交)
|
 |
(2009-07-01 14:54:04) |
那么通过什么办法可以判断? 比如说我有一个物体,怎么判断它当前在viewport中?还是不在viewport中?或者是只有一部分在?
|
 |
(2009-07-01 14:58:22) |
其实我要实现一个 Fit All 的效果,不管场景里的东西多大或者多小(camera 远近),只要“Fit All“,camera就会自动移到适当的位置,使得该物体正好撑满整个屏幕。
|
 |
(2009-07-01 15:30:15) |
我的思路是: 先把该物体各顶点的二维坐标求出来,取最大最小值,得到一个二维的Rectangle,然后再和viewport的Rectangle作比较。
但是似乎三维转二维坐标有问题,我先calculateScreenCoords(),然后得到的screen都是“0,0,0”,很是奇怪,不知道哪里出了问题?
|
 |
(2009-07-01 16:49:21) |
感觉ericvan君的思路不对啦,fit不fit只和camera有关,而camera是三维,也就根本不需要转换为二维。
应该是这样的,首先要计算出camera的梯形(三维的),然后把场景中所有物体的AABB(物体简化后的8顶点盒子)过一遍,然后得出这里面作为整个世界的AABB的8个极端顶点,然后判断时候都处于camera中,是要不是的话,则camera继续向后退,直到大AABB全部在camera的梯形(三维的)里出现位置。
|
 |
(2009-07-02 04:27:51) |
1. 算出所有物体的总AABB,进而以此AABB的(Max - Min) / 2的长度为半径得到一个Bounding Sphere.
2. 易得到,如果投下所有物体,视锥的左右两个面必须为Bounding Sphere的切面。 然后就可以利用已知的BoundingSphere的半径,FOV,利用三角函数求的摄像机距离球心的偏移量。
3. 以球心为观察点,V圆心 - (V观察方向 * L)求得摄像机位置, 更新摄像机。
|
 |
(2009-07-02 09:52:22) |
sexy君果然专业的手法,极强,效率显然要高得多。
to ericvan76君:上面这个就是图形之神的指示哦~被亲自指导一次是很不容易的^_^
|
 |
(2009-07-05 07:33:32) |
问题解决了。 多谢楼上两位啦,真是荣幸。
|
 |
(2009-07-05 12:48:16) |
如果能介绍一下大概解决方法更好哦~呵呵 继续加油!
|
 |
(2009-07-06 14:33:26) |
还是我原来的思路,找出总AABB,然后投射到二维坐标,得到外围的Rectangle,把这个Rectangle和viewport的sizeRectangle做比较。
Z君的办法也很不错,不过我还没时间试,等有空了再试试。
|
 |
(2009-07-07 09:24:19) |
噢,不错不错呀,也是非常有创造力的思路呢!
|