大作业是尽作者和电脑所能,复刻了《我的世界》这款游戏的漫游部分,实验操作方法已在控制台给出,方便操作一下将由三个部分讲解作业中的关键技术
随机地形生成以及无限效果
-
鼠标点击并读取三维世界坐标,用于用户自定义搭建方块
-
声音的交互与背景音乐
一.
地形
柏林噪声是《我的世界》里地形生成的基本技术,也常在其他领域常用于生成噪波贴图等。根据不同的x, z坐标生成连续的y坐标,由此模拟丘陵,高山,湖泊等自然地形。
其中的数学原理是由多个频率,振幅不同正弦函数叠加而成,因此所得到的y值介于1和-1之间的小数,并且有倍率和持续度两个参数控制生成的振幅和频率等。
这是一个大规模的柏林噪声生成地形。(由于电脑显卡对于30*30规模的方块漫游已经开始降速了,所以不能去通过切换视角来演示,并且后面想加的东西也因此受限很多)
但这个世界对于漫游的人依然的无限的,即不论去哪里都会有地形存在,没有类似天空盒的限制,这个技术是我自己想出来的,根据glLookAt()函数中的位置参数和焦点参数,我们可以用非常简单的初中几何算出一定大小的视野方块的四角坐标。
由于是方块世界,我们需要寻找出落在视野矩形内的方块,硬核判断咯,首先将判断范围缩小
然后方块大小为10,所以依次判断这些方块边界点是否在视野矩形内,可能会有轻微的误判,但扩大视野矩形后边界的瑕疵不足以有影响
缺点:1.视野矩形大约为30*30个块,300边长的长方形,900个块对于电脑显卡已经有点吃力,所以没有照顾到当漫游者视野上升,视野范围的扩大。预计加上三角函数便也可以计算出来,但是由于显卡限制就没有加入这个功能。
2.同样由于显卡限制,对于堆叠起来的地形最好的方式是让他们从最底层依次向上堆叠,这样当地形有突变的时候不会出现空缺。但为了程序良好运行我只能铺最上面一层的方块,对于突变就无计可施辽,如下图。同时,用户也不能像游戏里任意消除方块啦,不然地形就塌陷啦。
二.
坐标读取