minecraft吧 关注:2,542,566贴子:31,797,493

minecraft地形生成过程解析

只看楼主收藏回复

通过mcp代码了解minecraft地形生成


IP属地:江苏来自iPhone客户端1楼2017-09-18 10:01回复

    由于最近在参与minecraft分布式服务端minecase的编写,接触到了一部分minecraft地形生成有关的一部分机制。源码面前,了无秘密。虽说minecraft的地形是mc最最有趣,富于变化的部分,但是在理清楚源码的基础上,mc地形的生成过程还是比较容易理解的。接下来,我会从源码入手,解析mc的地形生成过。另外,平时事情比较多,更新可能比较缓慢。见谅。


    IP属地:江苏来自iPhone客户端2楼2017-09-18 10:02
    收起回复
      另外前排推荐一下我正在参与的minecraft分布式服务器,采用.net core编写,使用Orleans框架,如果大家感兴趣,欢迎大家参与或者给我们star


      IP属地:江苏来自iPhone客户端4楼2017-09-18 10:17
      收起回复
        Concept 基本概念
        地形生成的代码主要在net/Minecraft/world文件夹下,地形的生成主要分为两个阶段,generate和populate。generate主要进行基本地形生成,生物群落特有方块覆盖,以及skylight计算。populate主要负责建筑生成,植物生成,动物生成等地形附加结构。


        IP属地:江苏来自iPhone客户端9楼2017-09-18 10:40
        回复
          厉害了


          IP属地:江苏来自iPhone客户端10楼2017-09-18 11:02
          回复
            zc楼主


            IP属地:山东来自Android客户端11楼2017-09-18 11:09
            回复
              minecraft数据基本存储结构
              minecraft的地图数据存储的基本元素称为block,16x16x16个block组成一个section,16个section垂直排列组成一个chunk,chunk也就是我们常说的区块,区块的大小是16x16x256。chunk数据以nbt格式存储在文件中(nbt以后有空讲)


              IP属地:江苏来自iPhone客户端12楼2017-09-18 11:17
              收起回复
                block数据
                每个block数据主要包括block id和meta数据,当然在传输过程中还会有skylight数据。
                blockid用来区分区分不同种类的方块,metavalue用来区分每一大类方块具体数值,例如燃烧着的熔炉和普通熔炉。例如方块的朝向。


                IP属地:江苏来自iPhone客户端14楼2017-09-18 11:25
                回复


                  IP属地:广东来自Android客户端15楼2017-09-18 11:27
                  回复
                    chunk数据
                    每个chunk的数据包含了16x16x256的block,它也是地图传输与存储的基本单位。用户登入服务器后,服务器会将user所在点周围chunk传给客户端。


                    IP属地:江苏来自iPhone客户端16楼2017-09-18 11:41
                    回复
                      minecraft坐标系统
                      对于minecraft中坐标,玩家们应该都很熟悉,xyz中y轴是高度,x,z轴与地面水平。
                      接下来我来介绍一下mc中几个常用的坐标
                      1.Entity在世界中的坐标,共三个分量,xyz,类型float
                      2.Block在世界中的坐标,共三个分量,xyz,类型int
                      3.Block在chunk中的坐标,三个分量,xyz,类型int
                      4.Chunk在世界中坐标,共两个分量,xz,类型int


                      IP属地:江苏来自iPhone客户端19楼2017-09-18 12:51
                      回复
                        坐标转换
                        Block世界坐标转chunk内坐标


                        IP属地:江苏来自iPhone客户端21楼2017-09-18 13:20
                        回复


                          IP属地:河南来自Android客户端22楼2017-09-18 13:22
                          回复
                            Block世界坐标转chunk坐标


                            IP属地:江苏来自iPhone客户端23楼2017-09-18 14:03
                            收起回复