![]() |
DDM君 (2010-02-24 13:50:19) |
三维原理上一定要理解,靠摄像机越近,摄像机的fov(广角度)设置越大,物体就越会形变。 想想非主流大头照,和广角镜的拉扯,就是这个原理。 修改中点,我们一般用这样的一个窍门: 建立一个虚拟物体,比如DisplayObject3D. 将它移动到你想绕转动的某个位置(世界坐标位置) 然后用这个虚拟物体addChild(模型),然后转动这个虚拟物体,就可以达到绕任意点转动了。 关于模型(.dae)导入,如果你确信不是摄像机的拉扯 ,可以检查一下三维软件里scale了以后,谁是没有freeze transform把x y z的Scale归0. |
![]() |
Nick (2010-02-24 14:01:53) |
谢谢DDM君,先着手去试试~哈哈~ |
![]() |
DDM君 (2010-02-24 14:19:47) |
嗯多试验 加油啊 程序大师就是从且万次的失败和掀桌中练就的。哈哈 |
![]() |
Nick (2010-02-24 17:08:27) |
DDM君,对于第二个问题,偶已经按你给的方法做了,可是结果还是一样的效果诶,可能是我的表述不够清晰吧~其实我想要的效果是无论什么时候去拖拽这个模型,模型始终是按它的中心点进行转动。我现在把模型往左转,那整个模型基本就跑舞台左边去了,这样就不算是按模型中心点在转动,如果是按模型中心点转动的话,应该是模型位置是不发生变化只是显示面发生变化了。这次不知道表述清楚了没,虽然知道该绕哪个转,但是却不知道如何着手做,这个该是在哪控制的捏?请不吝赐教,谢谢!~ |
![]() |
DDM君 (2010-02-24 18:14:45) |
不知道您讲的是不是下面这种问题 这是一个flash3d的通病,当旋转摄像机时,它因为刷新速度问题而被扯向一边,当放开鼠标时,它有回正到中心。 同理的当两个分开的外部模型被同一约束约束时,两个物体的运动有先后的延迟。 |
![]() |
Nick (2010-02-25 16:50:23) |
呜呜呜~~DDM君,又琢磨了一天,发现问题越来越多了,首先是效果还是没有出来,其次我发现我修改camera,car的x,y或者是moveRight等属性时好像没有效果,无论值多大或者多小,都没效果。然后我还发现一个问题:同样的代码,导入不同的模型,拖拽转动时它围绕的半径会不同。3D做好的模型有注册点(原点)么?如果有,这个点的位置要怎么控制乜?能否放到模型的正中心?OMG,疯掉了要~~ |
![]() |
DDM君 (2010-02-25 17:06:00) |
第一个回帖中间那段,就是为了解决这个问题的。 camera一定要lookAt(虚拟物体)上才有意义。 |
![]() |
Nick (2010-02-25 17:19:58) |
首先非常非常感谢DDM君的热情回帖帮助!谢谢!~第一帖中间那段,我用的就是这个方法,但是奇怪的是我调整它的世界坐标居然无效。本人愚笨,无效这种情况可能是什么原因乜? |
![]() |
DDM君 (2010-02-26 11:42:23) |
诶,这个具体也不能估计出事什么问题。 您的意思是移动父物体,子物体位置不跟随变动吗? 这是不可能的呀,呵呵。 |
![]() |
Nick (2010-02-26 11:53:58) |
呵呵~给你添了很多麻烦了,我是说也说不清楚,做也做不好啊~我还是直接贴上代码吧,这样反倒更清楚一点: public class test01 extends Sprite { private var viewport:Viewport3D; private var renderer:BasicRenderEngine; private var scene:Scene3D; private var camera:FreeCamera3D; private var md:mouseDrager; private var plane:Plane; private var chair:Collada; private var myOb:DisplayObject3D; public function test01():void { viewport=new Viewport3D(600,600); renderer=new BasicRenderEngine ; scene=new Scene3D; camera=new FreeCamera3D(2,200); myOb=new DisplayObject3D; addChild(viewport); scene.addChild(myOb); chair=new Collada("88.DAE",new MaterialsList({all:new BitmapFileMaterial("888.jpg")})); chair.scale=0.15; myOb.addChild(chair); myOb.addEventListener(FileLoadEvent.LOAD_COMPLETE,onloaded); md=new mouseDrager(camera,myOb); addEventListener(MouseEvent.MOUSE_DOWN,md.onMouseClick); addEventListener(MouseEvent.MOUSE_UP,md.onMouseClick); addEventListener(MouseEvent.MOUSE_MOVE,md.onMouseClick); addEventListener(MouseEvent.MOUSE_OUT,md.onMouseClick); addEventListener(Event.ENTER_FRAME,process); addEventListener(MouseEvent.DOUBLE_CLICK,md.onMouseClick); } private function onloaded(evt:FileLoadEvent):void { } private function process(evt:Event):void { if (chair) { camera.lookAt(chair); } md.process(); renderer.renderScene(scene,camera,viewport); } } |
![]() |
Nick (2010-02-26 15:23:50) |
欧了~终于找到问题的原因,原来是我们设计师导出时没把模型放到正中,再次感谢DDM君的热心帮助~谢谢!~ |
![]() |
DDM君 (2010-02-26 16:48:05) |
呵呵,解决了就好啊。 帮我踢一下设计师的屁股吧~(哈哈 开玩笑) |
![]() |
Nick (2010-02-26 17:16:25) |
嘿嘿~我们设计可是女的噢~ 现在就等着你们出"万能开发包"了,公司让我独自研究一个这样的东东,那简直就是要我命么~有了这个包,我这小命算捡回来了,哈哈~ |
|
|