拥有这份源代码你就已经能够编写魔兽世界和海量怪塔防那样的大型游戏。
欢迎合作,欢迎投资,欢迎同学们技术咨询
联系微信 13535015390
使用vc6.0英文版,操作系统含w7以下完全没问题,w7以上可能不能单步调试,但幸好断点调试完全没问题。
其中有fbx模型的导出导入功能,需要fbxsdk支持,我已经拷贝到文件夹下了,直接设置途径就可以,如果不行就下载sdk包,然后使用压缩包中文件夹代替,因为那是我暴力修改让vc6能够够支持的源代码。
源代码(含服务器)下载地址:
http://gad.qq.com/hatch/project/detail/12756
游戏下载地址:
http://gad.qq.com/hatch/project/detail/12498
详细资料参见:
https://user.qzone.qq.com/188500397/blog/1464273121
最后版本游戏说明:
https://user.qzone.qq.com/188500397/blog/1441567649
源代码中技术包含(足够制作魔兽世界和塔防游戏的所有引擎技术):
1.文字显示
opengl库只能显示字母,能显示立体的中文,但不能显示最普通的中文,而且效率很低,根本就不可能用于游戏中.
经过不懈的研究,学习了调用字模库,后来终于被我给研究出高效显示文字了.好把,既然写了故事,就顺便分享技术满足各位同学的愿望吧.
直接使用操作系统API内存显示文字,转换成纹理贴图来做就好了,既效率好而且可以显示所有的文字.
2.键盘鼠标的研究
opengl有提供这些函数,但经不停的研究对比,发现还是使用windos的更好.
3.全屏幕的研究:
经过不断的思考和对比和遇到好多的问题,发现opengl的全屏幕在微软系统上的支持不是很好,所以后来决定使用窗口模式的假全屏幕来做,不然会遇到好多解决不了的问题,仅仅这个输入法问题就够呛的了.
4.各种WINDOS技术:
在微软系统上的程序,少不了这些的研究,必须样样深入研究,而解决这些问题的关键就是上面全屏幕的研究.opengl坐标和窗口的坐标转换也很麻烦,特别是全屏幕和窗口模式的切换.
5.地面的研究:
经过了很长时间的研究,终于解决了基本的问题,可以开始研究有点趣味的东西了.
开始采用魔兽争霸的地面拼图模式,固然是拥有了制作地面的技术,但这种技术我不满足,我希望拥有魔兽世界和完美世界那种无缝地图和渐变地面贴图的技术.
找遍因特网,只找到根据高度来贴图的例子,做不到随心所欲任意贴图,我坐立不安,后来采用显卡编程GLHL,终于研究出一次渲染支持无数层地面贴图的技术,非常高效,但由于多纹理数量限制,后来定位为一次渲染16层,所以大家能看到我的地面花花绿绿不是一般游戏可以比的,当然分成十六次渲染也能做到,但效率很低,这不是我忍心采用的技术。后来由于大部分电脑不支持GLHL显卡编程,所以改用cg显卡编程,经过了不眠的一天一夜研究,终于无误的改写为cg显卡编程,做到了普遍电脑都支持.但cg显卡编译器只能同时支持10个纹理,其实我没有同时10层一起渲染,所以上线的测试版定位为一次渲染10层贴图,如果把所有贴图拼成一张贴图那么就可以支持更多层贴图,但地面格子之间有接缝,理论上肯定能解决的,等我有时间再研究.现在一次渲染10层已经够用了,如果需要更多,可以分多次渲染来解决,比如雪地类型组贴图,沙漠类型组贴图,戈壁等.到此已经完美解决地面贴图问题.
6.地形研究(全球少有的无缝地图技术):
在这里花了好几个月时间,开始的的时候是想设计成随机生成山脉丘陵,注意是山脉有海拔高度的山脉,不是单独的山技术(我这个人很追求完美,山的技术是不能满足我欲望的),睡梦中拉起被子,以为被子就是山脉,我赞叹多么柔顺的数据,无论怎么翻数据都非常均匀都是没有菱角的山,后来也研究出了非常好的随机山脉,但总觉得有缺陷,出门我总看着山,回家制作出了这样的山脉,又发现缺少了另外的山脉类型,还是不满意.从此我每天都看着山.我没办法,不能完美解决此技术我心不能平静.无数次研究谷歌的高度图,后来终于决定采用真实的卫星高程数据来做,
在美国的网站下载的卫星高程数据http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp,数据太大,我不愿意我的游戏里有这么大块的数据,经研究后,终于做到只需要4m就能应用全球高度数据,当然这是卫星扫描的地图, 应用于游戏中还需要修改,虽然可以ps修改,但这样对后期的制作还不够方便和灵活,必须做到在游戏中可以随意修改才行. 之前为了减少数据体积采用了jpg技术,但是问题又来了,修改后保存数据,再此打开数据会有变化,因为jpg是压缩的嘛,数据不精确.后来只能采用折衷的办法,采用tga格式,16m的地形数据完美解决地形技术。
由于考虑压缩数据体积和无缝地图的设计,所以引擎算法非常复杂,这不是常人所能承受的了的设计过程,其中要大地图定位,小地图定位,真实地面定位,修改地面定位,缩放,小位移大位移,对准地面贴图,加上显卡的渲染顺序差异,还要支持无缝的大切图小切图,更费心机的是要设计到效率非常好且占用内存非常小,所以非常复杂.
如今轻舟已过万重山,已经完美解决了,说句心里,如果我忘记怎么设计的话,我不愿意再设计一次.
大概介绍这种高大上的无缝地图技术吧:首先下载全球地图快,ps拼图,体积非常大,缩小,因为地形数据连续是平滑的,缩放不影响质量,最后转换成灰度图,从16m的地图中,切一块够小又足够几个平面使用的大地图块,然后每次写入真实的地面数据,就从其中切一小快当前地图数据,
这样16m的数据就不用驻留内存,走了非常远才出界就重新切一块地图数据。估计暴雪也没我这样极端高效低耗的设计.
7.一望无际的的花草树木技术
自创的设计,想种多少就种多少,占用内存少效率非常高,配合地面贴图来种,就更加漂亮.想要设计会动的草,可以只做近的草会动,草是柔软的可以使用插值技术来做.每种草做两个最大的摆动模型,渲染时计算相同点之间一定的比例值就做到轻轻的摇摆了.树叶也可以这么做,那种总是正对着玩家摇动的技术我是绝对不用的,刀剑等硬的东西就不可以这么做,会变形的,必须计算模型部件的旋转才行.
8.一望无际的密集树林设计:
游戏中如果能现实山上密密麻麻的树木那该多么壮观,但是一次渲染几十万个树模型那可不是闹着玩的,一次我走在大理洱海边,看着前面的树,终于被我想到怎么高效实现这种技术.所以你会在我的游戏里面看到仅有绝无的密林.
9.影子技术:
之前多人打击我的影子技术,我还没时间做这些设计嘛,这个就比较简单,直接画一次模型到地面高度上就做到了.我设计的影子树叶都很清晰,连草都有影子。
地面的阴影就更简单,根据光线的角度计算明暗度,显卡编程中按照明暗渲染就好,不要在显卡编程中计算,那样每帧都要计算一次。
10.碰撞技术(这也是大块头技术,设计的好坏直接影响效率和后期制作)
通常的做法,每走一步,历遍所有辅助碰撞体,每个动物走一步都要历遍一次,每个可能碰撞的模型都要所有三角形计算一次碰撞,三角形的计算也比较复杂,所以这碰撞明显耗时间.
而且如果是多个模型或者多个三角形间有一条缝呢,一条缝是不可以穿过的,所以需要更多的计算.
我是怎么解决这些问题的呢,我的设计也是匪夷所思,我已经完美的解决碰撞的问题了,做到高效精确,免辅助碰撞模型,每走一步无需历遍直接就知道那个模型可能碰撞,采用高等数学自创的算法,研发了立体碰撞公式,不会穿过一条缝,也不会从一条缝里掉下来,计算碰撞三角形时还层层排除大部分免计算直接out,做到复杂的模型中乱穿不会卡住.更有决定意义的是后期制作非常简单,把模型放下去就支持碰撞了,房子楼层自动支持进出攀爬,把模型叠一起就成了现实碰撞的高楼大厦.
设计难度还有就是不同坐标系统的切换.也透露点技术,把动物的运动数据转换成模型旋转位移坐标系统后,再与模型计算碰撞,这样就高效.
这种极端高效低耗而且精确的技术就不公开,有缘再分享吧.
11.快捷键
已经完美解决支持任何快捷键的定义,这个没什么秘密技术,知道了就能做,我提示一下重点,这个WM_SYSKEYDOWN消息获取系统按键。
12.地面的万物:
这个就没什么好介绍的,直接选择模型摆下去就好了,自动支持碰撞和影子,想要什么样的场景就怎么摆.
13.庞大世界上花草树木的自动生成设计:
我设计的地图直线奔跑3天3夜才能走到边,不可能手动建设地面上的模型,但是如果不建又空荡荡的,地大浪费没意义了.
于是,设计了按照配置生成花草树木,首先设计配置文件,配置各种花草树木地皮的搭配,然后在专用的地面分布图上画圈圈,这些圈填上不同的颜色代表不同类型的花草树木搭配类型。然后引擎就根据这些配置自动生成。这样全球的生态环境就成了,当然这样不完美,然后可以建设任何模型,可以修改任何地形和地表贴图,这样就完美了.
引擎要设计好随机分布的规律,这个需要花心思去调整使之看起来更自然.我的设计已经自然了。
14.动物的设计:
从我发布的截图和测试版能看到,大的动物群体,各种动物三五成群,走走跳跳或是东张西望吃吃草.山坡上牛羊成群,可以设置为看到玩家就攻击的,只反击的,打不还手的,被打就跑的等。 如果我有时间还设计非洲奔跑的动物群场景,那场面就更加震撼了。既然能支持非常多同屏幕动物,自然支持大军厮杀的战场。
15.高效低耗:
如此大型的网游,每个人都会担心效率问题,如果不能做到极端的高效低耗,那么我的设计依旧是废物。从我已经上线的测试版可见,整个客户端含服务器压缩后才64m,哪怕是最复杂的场面,运行占用内存也不超120m(64位加一倍),占用cup时间也还是接近0.我已经估算了,就算之后加入非常多的资源和非常复杂的效果,占用磁盘空间也不会超过300m,占用内存也不会超过500m,占cpu也不会超过百分之30.
16.超强兼容性:
对电脑硬件的配置几乎无要求,最普通的配置就可以支持。只有一些太老的电脑不支持显卡编程才不支持.之前采用的显卡编程语言GLHL就是兼容性太差,所以才改用cg显卡编程
.所以凡是支持cg显卡编程的显卡都可以支持.
17.环保免安装的客服端:
只需下载很小的客服端,解压在任何地方,即可运行,不需要任何安装,不需要另外安装任何组件,绝对简单易用对电脑没有任何负面影响,令人愿意下载试玩,呵呵,这是抢别人玩家的关键.
18.服务器的设计
服务器就的技术相对于客服端来说就非常简单了,设计客服端需要10年,我设计服务器只需要几天.
作为大型3D网游的服务器,最频繁是每一个数据包都要找到服务器中对应的对象,而服务器中的对象少则以亿计,所以这个找对象的设计必须非常快,我做到了立即寻址,速度达到理想状态,理论上讲全世界不可能有人比我更快。
其他的设计是要考虑那些数据必须常住内存,那些数据可以保存到磁盘,什么时候该整理内存.
数据库的设计,考虑到访问数据库需要时间等返回,所以对于网游这种高速的要求来讲是不够快的,数据库功能直接设计在服务器里面了,可以关联一个唯一编号到外置数据库,用于商业和重要数据应用.这样做就完美了.
速度上是完美解决了,内存上我也是设计的太小气了,我总觉得我应该不怕消耗内存。
还有这个数据包也尽可能的小才行,带宽才是瓶颈。
分享封包常识:每个数据包最前面是长度位,接收数据时按照长度来收数据.
19.上帝之光技术。
20.fbx文件导出导入。
21.音效,音乐等
等应有尽有。
|