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

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 要光影吗?高级贴图吗?要抗锯齿吗?就得付出效率这个代价吧~










最近更新:
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(15:12:45)
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(10:01:38)
● DDM君阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(19:07:43)
浏览主题:关于控制Camera。

关于控制Camera。
fur3 (2009-12-05 11:59:11)

各位君君:

在下想实现一种效果,就像平时常见的全视角3D游戏那样,鼠标控制镜头,可以看到各个角落(就像WOW中,我们可以随意移动鼠标,可以从不同角度看世界。当然,摄影机目标是我们的人物)。由于PV3D中,摄影机是有移动、旋转能力的,我试着建立一个空3D显示对象,并将摄影机addChild到其中,按理说,父级就变为空显示对象了,此时如果移动或旋转这个空对象,摄影机也是会跟随它移动或旋转。然而,摄影机纹丝不动…X_X
另一种方法我也试过,就是把整个世界addChild到空3D显示对象中,移动或旋转空对象,就能实现目的。可个人认为,第一种方法是最符合逻辑的:我们(摄影机)是观察者,世界是被观察者,是我们主动移动或旋转去看世界;而第二种就像我们站在那里,想看身后景色的时候,世界主动转了180度…X_X

我的问题是:由于从没接触过传统3D游戏开发(C/C++ & DX),对3D世界的实现方式不了解,是不是3D游戏其实都是按照第二种方式实现的“目标摄影机”?还是PV3D比较特殊?如果用PV3D确实无法实现第一种方式的“目标摄影机”,那只好采用后者了,可是用后者的话,我要摄影机始终跟随空3D对象中某一个物体(人物)的话,又该如何实现?

望君君们赐教!





flash 3d 研究所
(2009-12-06 13:45:38)
                 stage.addEventListener(MouseEvent.MOUSE_DOWN,鼠标按下时执行的函数);
                 stage.addEventListener(MouseEvent.MOUSE_MOVE,鼠标移动时执行的函数);
                 stage.addEventListener(MouseEvent.MOUSE_UP,鼠标放开后执行的函数);
                       
然后剩下的就是些数学问题,在那些函数里将鼠标移动转换成摄象机PITCH和YAW度数就可以了

camera.orbit(cameraPitch,cameraYaw,true,cameraTarget);



flash 3d 研究所 noxss
(2009-12-07 02:14:03)
是不是没把camera的类型设置为'Free'呢。


flash 3d 研究所
(2009-12-07 13:58:42)
我只是想知道PV3D是否支持“目标摄影机”,
现在看来是支持的,且效果已实现。:)


flash 3d 研究所 DDM君
(2009-12-07 20:49:00)
建立虚拟物体,把摄像机add到虚拟物体上去,然后就随便处理这个虚拟物体就是了。
如果想对准什么的话,就把camera的target=某个物体就可以了。 都是很简单方便的。

另外就是自己写个类,或者方法, 定时自动根据物体的x,y,z,rotation,scale更新摄像机的坐标和旋转即可。


flash 3d 研究所
(2009-12-07 22:37:31)
我一开始想到的也是DDM君说的这种方法,
遗憾的是,无论如何移动或旋转虚拟物体,
摄像机就是纹丝不动。X__X
也正因如此,才到这里来求教各位郎君…


flash 3d 研究所 DDM君
(2009-12-07 23:17:56)
target如果被固定住了的话, 旋转camera就没有意义了,所以target要顶住一个虚拟物体B,然后再用虚拟物体A.addChild(虚拟B),然后旋转A。


flash 3d 研究所 DDM君
(2009-12-07 23:18:28)
lookAt了也是一样的,一有设定,就不能被旋转。


flash 3d 研究所
(2009-12-08 11:49:27)
我从来没想过用target或者lookAt,因为没必要。
原因:当camera一旦被addChild到另一个3D显示对象中时,
那么camera的父级就改变为那个3D显示对象了,
camera的世界坐标也就变为它父级的本地坐标。
此时可以把它俩看成一个“组”,“组长”是3D显示对象,
当你移动或旋转“组长”时,“组员”会被动的移动和旋转。
这个概念如果用两个3D显示对象(比如两个Cube)去实现,
是成立的,可一旦将“组员”换为camera就无法实现。

不知DDM君有没有亲自试验过您说的这种方法,如果您试过,
且确实成立,希望您能将代码列出以供对比。:)

总之我现在还在用orbit实现着该效果,
但愿这个比orbit方便很多的方法是确实可行的。:)


flash 3d 研究所 DDM君
(2009-12-09 11:58:31)
我们以前遇到过类似的问题,就是无法简单的旋转camera。我们的推断是target一开始就被顶住了,所以我们一般是靠控制target来达到自由旋转camera的目的。 否则就还是用orbit。


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

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

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

(目前需登陆方可发表)


不想添加了