游戏开发论坛

 找回密码
 立即注册
搜索
楼主: tonykee

lod地形贴图有了进展,有效果图,nostopforever和各位朋友可

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-24 19:02:00 | 显示全部楼层

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

我现在的室外场景引擎基础框架基本成型,已经不仅仅是个地形了,所以代码不便于放出,还请请见谅,但是思想可以交流,可以说说,你具体碰到了什么样的困难?

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-5-24 20:07:00 | 显示全部楼层

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

想要些纹理资源...看了FOCUS ON TERRAIN,可是用驴子拖源码拖不下来...所以书上的算法基本上要自己手工实现了,没了效果图有些理解还是麻烦.....还就是对于纹理方面的问题,书中对不同高度的象素插值用不同的纹理值填充,我看你用的是ALPHA混合...不知道是不是用地形编辑器生成的呢??PS:我没用过地形编辑器....

7

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2007-5-24 22:02:00 | 显示全部楼层

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

问下楼主,有没有高度图动态加载的程序?

当然1025*1025的高度图处理的话相对于搂主的电脑来说,是非常快的,可是如果过大的地图,肯定要使用动态加载,楼主有这方面的经验吗?

有的话,望赐教。我正在为这个痛苦呢。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

我才换了双核,速度又快了不少,不过显卡是集成6100的,能凑合支持sm3.0,没钱买好显卡了,呵呵。。。
现在加载我的程序,几秒的时间就把整个1025x1025的地图打开了,现在的CPU速度真的提高了很多啊。

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

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

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

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

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




119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

hotdognum1的问题,我明天再回答,很晚了,我得要休息了,保证好的睡眠,明天才好继续奋战,我有很多的思路,只苦于精力太不够用了。一天为什么不是48小时?  - -!

89

主题

822

帖子

847

积分

高级会员

Rank: 4

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

没老婆就是好,有老婆一天只有2小时。。。

7

主题

74

帖子

74

积分

注册会员

Rank: 2

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

然后把世界地图做拆分,拆分的单位可以是513x513

这里所作的拆分,是手动拆分,还是有程序去控制的拆分。

我的电脑配置就差点,赛扬1。7,显卡440的。不过在我的修改下,读一张1025*1025也就是几秒的时间,后来我查看了一下程序在各段运行的时间,发现,其实在加载1025*1025的高度图上需要的时间并不多,初始化时间的耗费都用在了四叉树初始化那块,由于递归的层次太深了,导致时间占用过多。然后修改递归的层次,程序效果并没有变化,初始化的速度反而快了很多。


另外想到使用一张非常大的高度图来存储所有世界地图信息,可是本身想要制作这张高度图就已经是相当麻烦了。另外还有对应的纹理图的制作。

我目前的程序使用的是程序生成纹理,可是如果不能全部读入高度图数据又很难生成纹理,当然也可以按照每次读入的大小生成纹理,可是这样一来,在uv的处理上就得作修改。

另外我也曾考虑过使用另外一种方法,利用程序先完全生成高度图和纹理图,然后将高度图手动分割,而纹理可以不分割,也可以分割,这样的话,就简单多了。不过这样一来,就会出现很多图片了。好像也是不好的。


痛苦中。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

不管多大的图,手工分割应该不复杂吧,用photoshop一下就搞定了,
什么光照,alpha混合,之类的图都是配套高度图去切割,这样地图块无缝衔接就不是问题了。
地图切割美工去处理就好,我们不用操那么多心吧。

3

主题

19

帖子

21

积分

注册会员

Rank: 2

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

Re: Re:lod地形贴图有了进展,有效果图,nostopforever和各位

tonykee: Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋友可继续给些建议

hotdognum1的问题,我明天再回答,很晚了,我得要休息了,保证好的睡眠,明天才好继续奋战,我有很多的思路,只苦于精力太不够用了。一天为什么不是48小时?  - -!

LZ好有冲劲啊,看来我也要加油了

89

主题

822

帖子

847

积分

高级会员

Rank: 4

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

Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋

有个问题,对于地形如果使用D3DPT_TRIANGLESTRIP,在相邻的2个Tile公用的顶点具有相同性质,这样,如果地形贴图比较复杂,大片VB产生的Block贴图编辑起来非常麻烦,但是如果使用一个一个的D3DPT_TRIANGLELIST,速度又比较缓慢。不知道大家如何处理的。

我看大家提供的例子中,地形的细节贴图非常少。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-15 13:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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