[GearMaster开发]游戏地图编辑器的参考和骨骼动画的错误

在回家之前简单写了一些代码,可以读一个文件,然后在指定位置显示若干个正方体,理论上这已经可以显示一个简单的地图了。

当然,这样显然并不能达到理想的要求。因为地图还没有按照分格的形式进行组织,不便于动态载入。

经过多次反复后,我还是决定采用类似模拟城市的组织办法——地型以格(Block)为单位组织。而格内部再分为若干份,以便于几何体在格内的组织和定位,形成一个一个的建筑物或者建筑物部分。而动态载入依然以格为单位。所有的格会组成一个大型矩阵,由一个表(Table)管理。

之所以选择用最古老的格子矩阵来生成地图,就是因为碰撞检测问题简单。毕竟这是2D游戏年代采用十分广泛的办法。曾经想试过用现在很多fps采取的自由构图,然后利用物力引擎进行碰撞检测。但是要实现动态载入的话,貌似要深入底层,比较麻烦。

我甚至想过用4/8叉树组织地图,或者用bsp。但是4/8叉主要还是用于lod,似乎帮助不大,反而变得复杂;bsp不利于动态构造,所以最终还是选择了古老的矩阵法。事实上即使是自由构图,在上古卷轴3在宏观上还是用了矩阵来载入地图。所以在里头跑了一段路之后游戏会卡一下,读入另一大格地图。

用格子矩阵的方法组织地图有一个难题,就是不利于玩家45度角的移动,因为如果格子与地图的碰撞检测直接挂钩的话就不便于判断斜对角是否可以移动。这可以用一些额外的信息去帮助判断。但另一个比较难的就是要构造45度对角的地型,也就是要在一个格子沿对角线分开,一边是地,一边是水这种情况。

在参考了魔兽和模拟城市之后,可以看到他们大致是这么做的:

假如地图上有三格水呈左边的这种排列方式的话,程序自动用一条斜线把右下的格子分裂开来,左上变成水,这样相当于构造了一个45度对半水面,也就是一共三格半水,而不是单纯三格的水

 _ _             _ _
|_|_|    -->  |_|_|
|_|              |_| /

难题在于如何自动判断那些格子要进行分裂。这个问题有点像一个经典程序——life模拟,也就是在很多个格子里放细胞,然后如果细胞周围有适当多个格子(好像是1-3个)有细胞,那细胞就可以存活,否则过多过少都会死亡。当然,life要模拟很多代,而我的程序只要一次就可以,所以可以进行比较笨拙的遍历。

观察一下上面那幅图可以想到在一格完整的水和陆地相接的那些格子只需要4张不同的贴图通过4个方向的旋转,一共16种情况就可以表示出来。

 

说完了地图,再说说开发过程遇到的问题

可以看看下面一个模型的截图。假如模型不动的话,看起来还是正常的

然而在播放一段在3dsmax中很正常的骨骼动画却出现了异常。本来是一个机器人向前拳击的动作,然而可以看到在ogre里头模型各部分移动和旋转的方向都错了——右边的肩膀本来后移却变成向下转,两只水平的手也变成垂直移动。很显然,骨骼的初始相对位置出现错误。

 目前还在努力寻找解决办法中。因为3dsmax里头很多很烦人的相对坐标问题。而不清不楚的ofusion没有明确的文档来标明他内部如何对待这些问题,所以只能摸着石头过河了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值