铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2284|回复: 4

[通用] 关于遮挡的处理方法

[复制链接]
发表于 2012-12-23 23:47 | 显示全部楼层 |阅读模式
本帖最后由 weyl 于 2012-12-24 14:33 编辑

最近几天试着把以前编写的代码完善一下,并尝试用跨平台编译。在修改时发现了一些问题,现在分享一下我的处理方法。


1. 场景内遮盖的问题

看过我写的代码的应该都知道,RLE8的解码并画图是自编的,效率并不高。在主地图上效率还可以,在内场景中效率就比较低下了,而在战场中景物多的时候效率也是很低的。所以之前我是先生成一个映像,需要画的时候直接载入这个映像,不经过RLE8解码,效率就高很多。这种映像显然是不应该包括主角的,所以画图的顺序是先载入映像的对应部分,再画主角。这时我们还必须考虑场景内物品对主角的遮挡,因此光画主角还不行,需要连主角身后的一些东西一起画出来。如果离主角很远的地方有一颗很高的树刚好够到主角的脚,这就是很麻烦的事情。所以之前的源码里面画主角的地方比较复杂,战场上画人物也是类似的考虑。
前几天我想到一个应该是较好的方法,也就是引入一个遮挡映像,记录场景映像中每个像素的遮挡数据,这样在画图的时候只需要画主角本身就可以了。这个遮挡值的考虑是这样的:

在这个场景中,明显是树要遮挡主角的,而根本的原因在于树根的位置比主角要靠近观察者,这可以理解为景深较小。这就是说,这个例子中树的全部像素的遮挡优先级要高,而遮挡优先级与景深是相关的,景深则可以定义为该物件所在场景坐标的x坐标和y坐标之和,这个值越大,遮挡的优先级就越高。而这棵树上每一个像素都应当有同样的景深,就是树所在的位置。
这样,我们在生成场景映像的时候,可以同时记录每个像素的景深值,景深小(注意该值大则景深小)的覆盖景深大的。这样在画主角的每个像素时比较该值来决定画还是不画。

2. 场景内动态效果
按照之前的画法,更新每个场景动态效果的时候,还需要考虑这个事件有没有被遮挡,以及该贴图占用的长和宽。现在改为直接重做场景映像,但是只重做可见部份的,因为可见部分大概是整体的1/8,效率可以提高很多。目前的效率已经比直接用显存画整体还要快。如果把映像生成在显存中可能会更快,这点我不确定?当然这是指在目前分辨率下的情况,更高分辨率下最好能单独处理每个贴图。

3. 战场绘图
在战场上画人物时,采取跟上面类似的方式。但是战场上有时候需要重画地面(选择目标,注意实际上仅重画地面是非常快的),这时又要重画建筑。这里用了一个技巧:考虑战场地面没有高度值,几乎不会遮挡任何东西,即其景深值可以全部视为0,那么在重画建筑层时,完全可以直接从场景映像载入,同时景深值为0的像素都跳过,这样就可以快速载入建筑层的像素了。当然也可以在显存中生成两个映像。但是建筑层映像还是需要遮挡的考虑。

4. 播放动画指令总是不正常
目前确定的是如果第一个参数为-1,则直接修改主角贴图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-24 10:51 | 显示全部楼层
我的引擎根本就不把全景图画出来,我会到处乱说么
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-24 11:53 | 显示全部楼层
KG 发表于 2012-12-24 11:36
半透明场景图怎么办

砍了重新用新逻辑
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-24 11:36 | 显示全部楼层
半透明场景图怎么办
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-24 09:33 | 显示全部楼层
本帖最后由 aawc1144 于 2012-12-24 09:34 编辑

为了一个90年代的游戏拼算法。。
我的引擎全部都是全屏重绘我会乱说。。?一来做接口,为了sfe#调用,省事,二来效率挺高,那就这么做吧。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-15 11:25

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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