本文仅仅是作者最近几天思考网络游戏是什么,该怎么做的臆测,我本人最近也仅仅看来一点opengl的编程,目前使用opengl画简单图都不会,下面的文字仅记录自己的思考流程,如有不当之处,请指正,谢谢。
场景:地图,地图上的物体等。
在程序中怎么表现一张地图?
在opengl编程中,一开始绘制图像,比如一个三角形、圆或曲线,这个和游戏中的地图有什么关系?
我们画图的时候,调用的是opengl的相关图形api,需要给定一些点坐标,然后就可以画出图形。
联想到游戏中的场景地图,它应该也是一些点坐标,而opengl等图形库只提供绘制基本的图形api,而现实中的地图,基本上都是三围不规则曲面,怎么绘制?
思考1:我们可以给定一些空间点的坐标(随机),连接这些点,则是一些杂乱的线段,如果我们设定这些点的坐标是一些地形的高低点,那么我们从该顶点向上或者向下按照某种随机角度延伸不定长度,那么则会形成很多小的曲面,这些曲面连接起来,就形成随机的空间曲面,空间曲面就是一张地图。
按照上面的方式,形成的曲面将是不规则并且没有规律的,每次可能都是不同的。
思考2:因为一般的图形库只提供简单基本的图形绘制,比如我们可以画一个圆柱,我们可以在这个图形上用不同的平面进行切割,也可以形成一些复杂的空间形状。
思考3:联系现实游戏中的地图,一个场景,它的地形都是固定的,我们并不能随机生成,否则每次进入游戏将看到不同的场景。
结论:由上述三点推导,游戏世界的地形,应该是一些小型的简单的空间图形拼接而成,而这些小型的空间图形他们是规则的,我们可以绘制出来,我们绘制一部分后,在接着绘制相邻的,然后形成大的空间地图。
编程怎样实现?我们有很多的图形的坐标的集合,并且他们是有序的,我们按照这种顺序一个一个的绘制图形,就形成的大的地图。按照这样的思想,我们的游戏世界的地形将是无限的向外延伸。因为如果到达了一个边界后,下一个地形和这个地形是联系在一起的,即这些图形都是按照某种顺序连接在一起的,我们只有知道了下一个图形的序号即可。
如果我们在一台机器上运行这个可以绘制图形的程序,那么我们把这些数据准备好就可以了。如果是网络游戏怎么办?显然,这些图形的数据应该由服务器发给每个连接上的绘图程序,则就形成了网络游戏。
根据上面描述,编程的时候,要绘制图形,我们把绘制图形的数据和绘制图形的方法独立开,我们把这些数据传递给图形绘制函数,则就会绘制出不同的图形。如果这些数据来源于网络服务器端,则就是网络游戏模型。
由此我们可以得到,游戏的客户端其实就是一个绘图程序,服务端就是存储这些图形坐标的程序。如果我们做到足够的灵活,我们把这些图形的数据存储在本地,然后在界面UI上有一个图标表示,那么这个客户端就变成了图形绘制程序。如果我们独立了对这些图形操作的方法,那么客户端程序将变成一个图形处理软件。