flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● ck47阁下在讨论区里 发表新主题“新手问题...”(07:49:50)
● 无语瓶阁下在教程区里 回复“《超简易papervision3D基础 ...”(18:09:44)
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
浏览主题:《超简易鼠标拖曳模型的功能》修改时出现的一些问题

《超简易鼠标拖曳模型的功能》修改时出现的一些问题
Nick (2010-02-24 13:27:22)

各位大虾们:根据DDM君《超简易鼠标拖曳模型的功能》实例,再加上了点小改动,基本能实现360度全方位的拖拽以及放缩的效果,现在仍有些问题困扰着我:
1,拖拽转动方面,实现了模型的上下左右的任意拖拽,但是转动时模型似乎是绕着屏幕正中心那个点在转动,而偶需要是的按模型的正中心进行转动,修改了半天,不得要领,郁闷ing...
2,增加的缩放功能,虽然实现,但是发现放大模型上的直线变成了曲线,或者可以说是波浪线,这个问题,完全无能为力...
3,模型导入方面,有部分的模型(.dae)导入之后的显示出模型变形,比如长方体变成了正方体,致使整个模型看上去都是变形的。但是将dae文件放在3dmax中看,又是不变形的,百思不得其解,更加郁闷ing...
请各位大虾们帮忙分析分析原因,谢谢~

 


flash 3d 研究所 DDM君
(2010-02-24 13:50:19)
三维原理上一定要理解,靠摄像机越近,摄像机的fov(广角度)设置越大,物体就越会形变。
想想非主流大头照,和广角镜的拉扯,就是这个原理。

修改中点,我们一般用这样的一个窍门:
建立一个虚拟物体,比如DisplayObject3D. 将它移动到你想绕转动的某个位置(世界坐标位置)
然后用这个虚拟物体addChild(模型),然后转动这个虚拟物体,就可以达到绕任意点转动了。



关于模型(.dae)导入,如果你确信不是摄像机的拉扯
,可以检查一下三维软件里scale了以后,谁是没有freeze transform把x y z的Scale归0.

flash 3d 研究所 Nick
(2010-02-24 14:01:53)
谢谢DDM君,先着手去试试~哈哈~

flash 3d 研究所 DDM君
(2010-02-24 14:19:47)
嗯多试验 加油啊
程序大师就是从且万次的失败和掀桌中练就的。哈哈

flash 3d 研究所 Nick
(2010-02-24 17:08:27)
DDM君,对于第二个问题,偶已经按你给的方法做了,可是结果还是一样的效果诶,可能是我的表述不够清晰吧~其实我想要的效果是无论什么时候去拖拽这个模型,模型始终是按它的中心点进行转动。我现在把模型往左转,那整个模型基本就跑舞台左边去了,这样就不算是按模型中心点在转动,如果是按模型中心点转动的话,应该是模型位置是不发生变化只是显示面发生变化了。这次不知道表述清楚了没,虽然知道该绕哪个转,但是却不知道如何着手做,这个该是在哪控制的捏?请不吝赐教,谢谢!~

flash 3d 研究所 DDM君
(2010-02-24 18:14:45)
不知道您讲的是不是下面这种问题
这是一个flash3d的通病,当旋转摄像机时,它因为刷新速度问题而被扯向一边,当放开鼠标时,它有回正到中心。

同理的当两个分开的外部模型被同一约束约束时,两个物体的运动有先后的延迟。


flash 3d 研究所 Nick
(2010-02-25 16:50:23)
呜呜呜~~DDM君,又琢磨了一天,发现问题越来越多了,首先是效果还是没有出来,其次我发现我修改camera,car的x,y或者是moveRight等属性时好像没有效果,无论值多大或者多小,都没效果。然后我还发现一个问题:同样的代码,导入不同的模型,拖拽转动时它围绕的半径会不同。3D做好的模型有注册点(原点)么?如果有,这个点的位置要怎么控制乜?能否放到模型的正中心?OMG,疯掉了要~~

flash 3d 研究所 DDM君
(2010-02-25 17:06:00)
第一个回帖中间那段,就是为了解决这个问题的。
camera一定要lookAt(虚拟物体)上才有意义。

flash 3d 研究所 Nick
(2010-02-25 17:19:58)
首先非常非常感谢DDM君的热情回帖帮助!谢谢!~第一帖中间那段,我用的就是这个方法,但是奇怪的是我调整它的世界坐标居然无效。本人愚笨,无效这种情况可能是什么原因乜?

flash 3d 研究所 DDM君
(2010-02-26 11:42:23)
诶,这个具体也不能估计出事什么问题。
您的意思是移动父物体,子物体位置不跟随变动吗? 这是不可能的呀,呵呵。

flash 3d 研究所 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);
}
}


flash 3d 研究所 Nick
(2010-02-26 15:23:50)
欧了~终于找到问题的原因,原来是我们设计师导出时没把模型放到正中,再次感谢DDM君的热心帮助~谢谢!~

flash 3d 研究所 DDM君
(2010-02-26 16:48:05)
呵呵,解决了就好啊。
帮我踢一下设计师的屁股吧~(哈哈 开玩笑)

flash 3d 研究所 Nick
(2010-02-26 17:16:25)
嘿嘿~我们设计可是女的噢~
现在就等着你们出"万能开发包"了,公司让我独自研究一个这样的东东,那简直就是要我命么~有了这个包,我这小命算捡回来了,哈哈~

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

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

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

(目前需登陆方可发表)


不想添加了