コード例 #1
0
        private void AppendBlockRenderData(BlockDataManager buffer, int x, int y, int z)
        {
            Coord coord = new Coord(x, y, z);
            var   color = GetBlockColor(coord);

            if (color == 0)
            {
                return;
            }

            for (int face = 0; face < 6; ++face)
            {
                var faceDir = new Coord.Direction1(face);
                if (!IsNormalCubeBeside(coord, faceDir))
                {
                    buffer.AppendRenderData(new BlockRenderData
                    {
                        pos       = Translation + coord.ToVector4(1.0f) + faceDir.coord.ToVector4(0) * 0.5f,
                        col       = GetColorFromInt(color),
                        dir_u     = 0.5f * faceDir.U().coord.ToVector4(0),
                        dir_v     = 0.5f * faceDir.V().coord.ToVector4(0),
                        aooffset  = GetAOOffset(coord, face),
                        lightness = GetLightnessVec(coord, face),
                    });
                }
            }
        }
コード例 #2
0
 private float GetLightnessForVertex(Coord coord, int face, int index)
 {
     Coord.Direction2 vertex = new Coord.Direction1(face).UVPN(index);
     return(MakeLightnessForVertex(face,
                                   GetLightnessOnFace(coord, face),
                                   GetLightnessOnFace(coord.WithOffset(vertex.Devide(0).coord), face),
                                   GetLightnessOnFace(coord.WithOffset(vertex.Devide(1).coord), face),
                                   GetLightnessOnFace(coord.WithOffset(vertex.coord), face)
                                   ));
 }
コード例 #3
0
        private Vector4 GetAOOffset(Coord coord, int face)
        {
            Coord.Direction1 dir = new Coord.Direction1(face);
            var offsetCoord      = coord.WithOffset(dir.coord);

            return(AmbientOcculsionTexture.MakeAOOffset(
                       MakeAOInner(offsetCoord, dir.UVPN(0)),
                       MakeAOInner(offsetCoord, dir.UVPN(1)),
                       MakeAOInner(offsetCoord, dir.UVPN(2)),
                       MakeAOInner(offsetCoord, dir.UVPN(3))));
        }
コード例 #4
0
 private bool IsNormalCubeBeside(Coord coord, Coord.Direction1 offset)
 {
     return(AnyBlockAt(coord.WithOffset(offset.coord)));
 }