找回密码
 点一下
查看: 3205|回复: 5

面向新手的演算体旋转的教程-更新了手把手图文

[复制链接]
发表于 2013-3-8 19:58:21 | 显示全部楼层 |阅读模式
本帖最后由 yxxiaobin 于 2013-3-14 20:34 编辑

演算体旋转其实不是一个很新的话题了,星星,四夕水等都给了很好的教程,但是有些是面向中手的,所以小彬这里补一篇面向新手的教程。
很多人玩模型拼凑组合,都会产生一种想法:怎样让模型改变固有的姿势,可以任意设置角度呢?官方给了三个方法:1.在演算体中直接设置旋转消息,不过不能响应演算体创建事件来设置,而且,这种旋转是暂时的,当单位移动或会还原。2.使用触发器发送演算体消息,这样做的好处是方便动态的控制旋转角度,弊端同在演算体中直接设置消息。3.使用旋转演算体,这样做的好处就是能创建永久的旋转,而弊端就是难以动态改变。
不论哪种方法,了解演算体的姿势设置规则是基础,如果你不是很明白,那么使用起来就比较困难。当然,现在小彬已经给出了傻瓜版的工具,不明白这个也你那个借助工具完成,但毕竟还是了解一下比较好。
星际争霸2的世界是3维的,就如同我们真实的世界一样,为了描述这个世界中的某个物体的位置,暴雪给他定义了一个三维直角坐标系,其中,向右为X轴正方向,向屏幕后方(即我们面向的方向)为Y轴正方向,向上为Z轴正方向。图示如下:
1.JPG
为了描述一个物体的朝向,我们任意指定两个不在同一直线上的方向即可,暴雪给的是指定头端朝向方向和脊背朝向方向,分别叫做向前、向上。但是指定方向的话多少有些困难,因为这需要分别指定该方向和三个坐标轴的夹角,这很不直观,比如我们说让模型向右转30度,再向上翘35度,向前方向和三个坐标轴夹角是多少?非常难以想象。暴雪给了一个比较直观的方法:向量。也就是说,在一个方向上(比如向前方向)截取1单位长度,这个截点就具有唯一的xyz坐标,只要指定这个坐标,就能得出这个点,然后加上原点,根据两点确定一条直线的原理,就能确定一个方向。
所以说,暴雪给出的旋转演算体的方法就是指定两个坐标,一个是向前偏移坐标,一个是向上偏移坐标(以下简称前移和上移坐标),进而通过内部机制,转换成演算体旋转的情况。

如果使用全局坐标系,默认情况下,单位的头端朝向右,脊背朝向上,所以前移坐标为(1,0,0),上移坐标为(0,0,1)。
1.JPG

如果让单位的演算体向左转向90度,很容易想到,这两个坐标就变成(0,1,0)(0,0,1)。
2.JPG

如果再让单位头端上翘90度,则两个坐标变成了(0,0,1)(0,-1,0)。
3.JPG

如果你能看懂最后这组坐标是如何得出的,那么你基本上理解了演算体旋转的控制模式了。

但是这还不够,因为刚刚提到的是特殊角,如果是任意角,坐标是多少呢?好多新手也会这样提问,然后就会有高手指出:别总伸手,自己试。小彬是比较笨的,慢慢试这种事不适合我,于是直接放弃了。事实上我不认为真有人能根据一个单位的姿态直接就猜想出这两个坐标的值,即便猜了,误差往往很大。不过旋转有时真的很有用,放弃不用是不行的。我就想,能不能指定模型的旋转角度:比如这样想,先让模型转身多少度,然后头端上翘多少度,然后侧滚多少度,这样不是更直观吗,于是这个问题终于得到解决了。我首先做了一个触发器发送设置旋转消息的通用动作,里边包含了计算公式,只要指定面向、翘头和侧滚角度就可以了,其余的公式会自动完成。但是这个不适用于使用演算体中设置消息和使用准确旋转类演算体,因为这两种方法都需要直接指定数值而不是计算公式。为此我做了一个小程序,输入角度后能直接显示两个坐标的具体数值,省去了“慢慢试”的麻烦。
具体的意义:
朝向角度:这个容易理解,就是在没有进行其他旋转时,单位的面向,或者说单位绕自身Z轴旋转的角度,如果从上向下俯视,逆时针转为正方向。
翘头角度:这个更直观,就是头端翘起的角度。
侧滚角度:
就是单位左右翻身的角度,其中向自己右侧翻身为正方向。
所有这三个角度,都是参考自身当前状态的值,所以,考虑旋转角度时,必须遵循先设置朝向,再设置翘头,最后侧滚的顺序。如果还是不明白,自己拿一个玩具小汽车摆弄一下就知道了。

最后额外补充一下,“准确旋转”类的演算体有一个字段叫做“是局部的”,如果设置为开启,那么将使用模型自身在默认状态下的坐标系,这时候有个问题就是,在默认情况下,演算体的头端是朝向自身坐标系y轴负方向的,也就是说向前坐标默认为(0,-1,0),计算时就要在原来基础上绕z轴旋转90度,为了能用起来更简单,我在计算工具中添加了一个“是局部的”选项,如果你在演算体中设置了该字段开启,务必要勾选该选项,否则请取消勾选。
附上两个演示的链接:
触发器通用动作演示 http://bbs.islga.org/read-htm-tid-1742404-page-1-fpage-1.html
计算工具 http://bbs.islga.org/read-htm-tid-1815071-page-1-fpage-1.html
有需要的请自取。最后小彬弱弱的问一句,明明有人下载,咋没人回复呢?如果觉得不好用,也可以拍个板砖嘛。
--------------------------------------------------------------------------------------------------------------

好吧,鉴于有站友指出写的不是很明白,那么小彬在后边补一篇详细图文教程吧,因为前文已经介绍过向前和向上坐标的意义了,而且因为有工具辅助,明不明白都不是很重要,所以这里就略过了,直接写怎么使用工具来制作演算体旋转。
首先我们要新建一张地图,依赖项保留最基本的就可以了,当然你喜欢多加几个也无所谓。然后建立一个“准确旋转”类的演算体。右键新建一个,命名为凤凰战机旋转(命名神马的自己写,只要自己能看懂就行,我打算用凤凰战机做演示,所以就用了这个名字)。
1.JPG

然后看一下字段:
2.JPG
通常情况下,“是局部的”这个字段要设置为启用,否则单位移动时不会转向。如果你需要使用全局坐标系,就是开篇那个图示所呈现的坐标系,那么请设置为禁用。
然后看“前移”和“上”。实际上“上”这个说法不准确,应该是“上移”。程序里我把它翻译为向前和向上,多少是有些不合适,下次如果还更新的话,或许会改过来。这两个字段的意义前边已经说了,就不重复了,如果不明白,只需要知道这两个字段的值是控制旋转角度的,它们可以用计算工具计算出来就可以了。
假设我们需要让凤凰战机倒退着飞,并且头向上翘起30度,那么转向角度分别为:朝向180,翘头30,侧滚0。然后开启计算工具,输入这三个数:
3.JPG
可以看到下边已经显示出两个坐标来了,然后回车,或者按“生成xml代码”按钮,会提示生成代码成功,然后切换到数据编辑器窗口,并启用xml视图,将光标放在图中所示位置(如果你没有启用“是局部的”,那么看到的和这个不同,需要自己稍作修改,如果不会,可以先勾选上,粘贴完会表格视图再设置为禁用):
4.JPG

按下Ctrl+V键,粘贴刚刚生成的代码:
5.JPG

然后再次切换到表格视图:
6.JPG
可以看到坐标已经变成我们计算好的了。然后转到凤凰战机的单位演算体(在常规基础单位分类下),找到“主体位置操作”这个字段,双击打开,然后按“增加”按钮,把新增的位置操作演算体设置为刚刚做好的 凤凰旋转:
7.JPG

然后按确定键,这样就改好了。在地图上放一个凤凰战机,然后把它设置成朝向0度看看:
8.JPG
可以看到,正常情况下,朝向0度,演算体朝向右侧,而进行了旋转的凤凰,则朝向左侧,而且机头微微上翘,正是我们想要的效果。你可以进游戏测试一下,可以看到凤凰是倒退着飞行的。

上边只是简单的介绍了演算体旋转的用法,其实最多的不是旋转单位固有的演算体,而是旋转模型附加物,从而拼接处丰富多彩的模型来,有了计算工具的帮助,模型旋转拼接将变得异常简单,没事的时候来玩拼接吧。
发表于 2013-3-9 20:26:22 来自手机 | 显示全部楼层
受教了,谢谢大神指导

点评

嘻嘻,应当说谢谢菜鸟分享嘛,小彬从来都是以新手自居的。  详情 回复 发表于 2013-3-10 20:25
回复

使用道具 举报

发表于 2013-3-10 08:04:48 | 显示全部楼层
这么说我连新手都算不上
回复

使用道具 举报

发表于 2013-3-10 11:01:21 | 显示全部楼层
因为这个编辑器比较难,所以新手也包括了好几个阶段的。

不会连新手都算不上
回复

使用道具 举报

 楼主| 发表于 2013-3-10 20:25:26 | 显示全部楼层
刹那111 发表于 2013-3-9 20:26
受教了,谢谢大神指导

嘻嘻,应当说谢谢菜鸟分享嘛,小彬从来都是以新手自居的。
回复

使用道具 举报

发表于 2018-5-11 15:04:04 | 显示全部楼层
很实用的软件,完全傻瓜式,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-20 21:01 , Processed in 0.340455 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表