游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10310|回复: 18

关于无限大地图的构想

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-5-25 08:26:00 | 显示全部楼层 |阅读模式
地图无限大的情况,一个也许不周全的的思路,我的想法大致是这样:
这下面的论述并不是LOD四叉裁减算法,LOD算法实现之后再去用下面的思想:

整个游戏的高度图可以做的很大很大,大的可以装下整个游戏地图外景的顶点信息,也就是所谓的世界地图。(具体多大根据游戏的需要,不限制)
然后把世界地图做拆分,拆分的单位可以是513x513,考虑每个区域加载速度,和频繁释放和加载的效率,不易过大或过小,我觉得513这个规格应该不错,每个513就是一个地形区块,这个区块是内存管理的最小单位,要么一次加载一个513x513的单位,要么一次释放一个513x513的单位,而且,由于这些区块是由世界地图拆分的,彼此之间接缝是绝对没问题的,这也就是所谓的无缝连接地形吧。
下面最精彩的部分开始了:
一个角色一般都在某一些活动范围比较频繁的,不管多频繁吧。思路这样:
我设置一个队列,里面放区块的编号,假设现有的区块编号为1,2,3,4,5,...100...

假设这个队列最多只放9个编号(具体多少个,自己去设置,表示内存里面驻留多少个区块)
每当角色的视锥进入一个区块的时候,首先看队列里面有没有这个编号,如果有的话把编号重新排在队列的begin处,没有这个编号,表示角色从没进入过这个区块,不用重排了,直接创建该区块,并把编号加到begin处,当队列的长度超过9的时候再有新的编号加入head的时候,最后的end也就要出队列了,这就表示要从内存中release最后一个编号所对应的区块了,其实我的意思就是队列里面只保留最近访问的9个区块,当然不一定是9,可以去调整。
而且这些区块一定是按照访问的先后排序的,出队列的被释放,新加入队列的,重新加载

内存占用多少和频繁加载释放频率是成反比的,你自己来调整这个值就好

另外四叉分割只在以角色为中心范围的4个区块也就是1025x1025(当然也能是16个区块257x257每个区块)的范围去计算,而且永远都是在这样的规格下去分割,效率自然有保证。

也许还有我没考虑周全的地方,我要具体去实现了才知道,现在只是有个初步的想法

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-5-25 09:08:00 | 显示全部楼层

Re:关于无限大地图的构想

不能依赖系统内存,无论队列有多长,总是有进有出,所以问题的关键不在用多大的缓冲,而在于加载时如何以最快的速度读取更多的资源而不影响主渲染,使玩家感觉不到内存的切换。

DirectX SDK中有个例子

ContentStreaming Sample
The ContentStreaming sample demonstrates streaming content in the background for applications that need to display more data than can fit in video or system ram at any given time.

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-5-25 09:12:00 | 显示全部楼层

Re:关于无限大地图的构想

客户端的好解决,线程动态加载资源就行,我以为是解决了服务器的MAP无缝衔接呢…

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2007-5-25 09:24:00 | 显示全部楼层

Re:关于无限大地图的构想

正确的做法应当是
4叉+辅助线程+流式载入

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-25 09:34:00 | 显示全部楼层

Re:关于无限大地图的构想

可是一般一个角色都是经常在一个范围活动,队列里面的块比较固定,不会带来频繁的释放加载的问题,辅助GC场景对象维护的线程已经有了
只有在不停的向一个方向从头到尾的移动才会间隔的加载地形块。我想,这个问题不能避免。关键是加载多大的地形块的问题,客户端开销的起就行,至于服务器端,暂时我还没去考虑。
ContentStreaming  再去研究研究。

我的框架里面还没加入网络部分,不久以后我就要加入了,我想采用IOCP的方式。

7

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2007-5-25 10:14:00 | 显示全部楼层

Re:关于无限大地图的构想

请问楼上的dada们,哪里有类似的例子或是论文的,指点一下迷津。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-5-25 14:16:00 | 显示全部楼层

Re:关于无限大地图的构想

4楼太格式化了,四叉和流式这些东西不应该成为标准,只是可选方案。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-26 11:42:00 | 显示全部楼层

Re:关于无限大地图的构想

http://bbs.gameres.com/showthread.asp?threadid=84156

关于这个主题,我写了详细的资料

2

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2007-5-29 07:56:00 | 显示全部楼层

Re:关于无限大地图的构想

  这个方法我曾经用过,速度是没问题的。问题在于“跳”。当人物跨过单元的界限,满足条件的时候,画面上的物体(或者说视野)会突然增加,感觉不好。
  如果增大单元的规格来解决这个问题,就要让单元的规格比角色的视野大。这样,9个单元(最少6个)的速度也是够戗。
  如果减小单元的规格来解决这个问题,就会增加需要绘制的单元,极端的情况下会让这种设计本身都失去意义。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-29 11:37:00 | 显示全部楼层

Re:关于无限大地图的构想

我的设计思想是视锥的视野范围根本出不了周围包围的8个Tile,怎么会出现跳动呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 02:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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