zerO

纪念我所怀念的一切.

« zerO3d更新至v1.0.2谈谈zerO3d的发展 »
2009-2-2 13:41:29 | 发布:linfuqing | 分类:zerO3d | 评论:0 | 引用:0 | 浏览:

zerO3D中文使用说明---基础:坐标篇

zerO3d里的坐标分成3种:

* 世界坐标( world position )

* 真实坐标(true position )

* 屏幕/视口坐标(sceen/view position )

可能有些头大,如果这部分你不想看,可以直接跳到下面相机部分.

____________世界坐标(world position)_______________

所谓世界坐标,即在一个场景里的绝对坐标.

世界坐标是一个三维坐标,我们通常说的X,Y,Z就是指世界坐标.

世界坐标不随我们视角移动,只有当物体真正移动时它的世界坐标才会改变.

____________真实坐标( true position )_________________

真实坐标即我们视角的坐标,它是一个相对的三维坐标.

当我们视角移动时候它也会发生改变,说白了,它既是对屏幕坐标的一个三维影射.

如果从物理上的相对运动来说,两个物体同时同速运动,它们的世界坐标发生改变,但是它们的真实坐标却没有改变.

_____________屏幕/视口坐标(screen/view position)____________

这个坐标是比较奇怪,它是一个二维坐标,它会随着视口的方向发生改变,即真实坐标在视口上的二维投影.

比较好理解的是在某种特殊情况下它就是屏幕上的坐标X,Y,,并且这种特殊情况我们经常使用,就是当视口平面与我们屏幕平行的时候.

如果你定义一个新视口,那么它将把这种情况设定为默认状态,所以一般情况下把它们理解成屏幕上对应的X,Y坐标就可以了.

____________________________________________________________

好了以上介绍了zerO3d中的坐标,那么哪些物体是采用哪种坐标呢.

zerO3d一开始就将点做为所有物体的基类.所以zerO3d中的任何物体坐标都由两个最基本的点决定.它们分别是:

* 三维点(point3D)

* 方向点(vector point)

__________________________三维点(point3D)_______________________

几乎所有的物质都是三维点的子类.也就是说,它们的坐标完全继承了三维点特性.

三维点囊括了了以上三种坐标,一般情况下你只要使用世界坐标就足够了,其他两种坐标引擎将自动计算.

__________________________方向点(vector point)_____________________

方向点比较特殊,它只有世界坐标,但另外包含了方向,它通常作为视口类不受真实坐标始终是0的基类.

比如相机.

______________________________________________________________

好,如果你认真地看完以上内容,并成功地理解了.那么恭喜你,你已经具备与我一同开发zerO3d的充分条件.

如果你看完没有理解或者跟我一样看到这么多对自己没有任何意义的文字会习惯性地跟看国足似的一脚踩在屏幕上,那么也不要泪丧.下面将介绍对你有用并且利于理解的东西.

* 三维相机(camera3D)

____________________三维相机(camera3D)________________________

为什么在这里介绍相机呢,因为它跟坐标息息相关.

相机也称为视截体,视截体用来表示一个空间范围,位于这个空间范围内的三维场景的任何物体都可以被看到.

以上是抽象的说法.比较形象的你可以把相机想象成你的眼睛,你转头或者走动,你所看到的东西也随着变化.

如果说视口是场景的一个窗户,那么相机就是一双可以带你走进场景的眼睛.

zerO3d中的相机很强大,它集成了几乎所有的智能化,无须子类的扩充.

你可以定义一个相机象这样:

var camera:Camera3D = new Camera3D( target );

target是一个3D向量(Vector3D),它代表相机的目标.默认为空.如果设置,相机将是目标相机,反之相机为自由相机.

然后你要使用它,必须将它设置到你的视口上:

viewport.onCamera( camera,interplotion );

interplotion是一个0-1的Number型数字,它将赋予相机一个插值,这个插值采用四元数结构.它将得到平滑地移动.

可能你还不太理解插值的意思,用这个例子来说明,使用插值,它将使得你的屏幕很平滑地移向相机,然后最终于相机的视角重合.而不是一下子将相机的视角显示在你的视角上(这样或许有时候你会觉得太生硬).

好了,现在你已有了相机,如果你想切换相机,你也可以象上面那样设置,如果你有很多相机,并使用插值,你将会得到一个很玄的效果.zerO3d中相机不会储存除位置外的任何数据,所以你可以放心地将它添加到你的数组里,不用担心你程序的内存占用量.

下面我们把话题回到相机本身上,你可以象这样移动它:

camera.x += 50;

camera.y += 50;

camera.z += 50;

也可以转动它的方向:

camera.rotationX += 10; //绕X轴旋转10度

camera.rotationY += 10; //绕Y轴旋转10度

camera.rotationZ += 10; //绕Z轴旋转10度

你将看到你的场景像后倒去的样子.Ok.现在你已经基本了解相机的使用,下面介绍相机的两种类型:

* 自由相机

* 相机相机

如果你使用过3DMAX,你将很快能理解它们.

_____________自由相机_______________

自由相机顾名思义,你可以完全自由地操纵它.它的位置和方向都由你自由支配.

_____________目标相机______________

你不能控制目标相机方向,它的方向完全锁定在它的目标身上,不管你如何移动相机,它也会杀千刀地望向你给它指定的目标.

如果你要切换它的目标,可以像这样:

camera.target = target2;  //如果你的target2不是Vector3D类型,编译器会报错

我在切换目标时也设置了插值,你可以设置你的插值:

camera.directionBuffer = 0.05;  //0 - 1的Number值

这里的插值是弹性插值,跟Flash里插针时候的缓冲效果一样.它的动画效果很棒,你可以自己试着使用它.

谈到插值,这里还有一项,就是让相机接近目标,像这样:

camera.closeToTarget();  //必须设置在帧上,当相机为自由相机时使用无效

这两项插值结合,即使你只有几行代码,你也能制造出很完美的动画,特别在使用粒子系统的时候.

* 注:以上插值没有自带的关闭系统,你必须以你情况关闭它,比如:

if( camera.distance > 2 )      //distance返回相机到目标的距离

{

  camera.closeToTarget();          //当相机与目标的距离小于2时,关闭插值

}

______________________________________________

好,相信你已经明白了相机的使用,你已经能做出很漂亮的动画了,你可以参照上一篇粒子系统的例子,做出你想要的效果.

最后,谢谢你对zerO3d的支持!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

最新评论及回复

友情链接

[Top] Powered By Z-Blog 1.8 Arwen Build 81206. Theme FormerDays Design By haphic

[-Do U rmAmb al _LEAVEs_ Missing UnderTheTree-]
All by 怀念从前.