Ejemplo n.º 1
0
        private VertexPositionNormalTextureColor[] createFaces(BlocSide side, Point3d position, int textureNumber, Vector3 decal)
        {
            Point3d[] decals = listFacesDecal[(byte)side];
            Vector2[] uvs    = listUvs[(byte)side];
            VertexPositionNormalTextureColor[] vertices = new VertexPositionNormalTextureColor[6];

            float sunLuminosity        = (float)getSunLuminosity(position + FirstBlocAbsolutPosition + SideDecal[(byte)side]) / 15;
            float artificialLuminosity = (float)getArtificialLuminosity(position + FirstBlocAbsolutPosition + SideDecal[(byte)side]) / 15;

            if (!LightComputed)
            {
                sunLuminosity        = 1.0f;
                artificialLuminosity = 1.0f;
            }

            for (int i = 0; i < 6; i++)
            {
                Vector3 p = new Vector3((float)position.X + decals[i].X + decal.X, (float)position.Y + decals[i].Y + decal.Y, (float)position.Z + decals[i].Z + decal.Z);

                float decalX = (float)(textureNumber % 16) * (1.0f / 16.0f);
                float decalY = (float)(textureNumber / 16) * (1.0f / 16.0f);
                var   uv     = new Vector2(((1.0f / 16.0f) * uvs[i].X) + decalX, ((1.0f / 16.0f) * uvs[i].Y) + decalY);

                float vertexSunLuminosity        = sunLuminosity;
                float vertexArtificialLuminosity = artificialLuminosity;
                float occlusionLuminosity        = 1.0f;
                if (true)
                {
                    Point3d[] blocPositionOcclusionList = new Point3d[]
                    {
                        FirstBlocAbsolutPosition + position + listDecalForOcclusion[(byte)side][i, 0],
                        FirstBlocAbsolutPosition + position + listDecalForOcclusion[(byte)side][i, 1],
                        FirstBlocAbsolutPosition + position + listDecalForOcclusion[(byte)side][i, 2]
                    };
                    int mixCount = 1;
                    for (int j = 0; j < 3; j++)
                    {
                        var blocPositionOcclusion = blocPositionOcclusionList[j];
                        if (isOpaque(blocPositionOcclusion))
                        {
                            occlusionLuminosity -= 0.2f;
                        }
                        else if (j < 2 || mixCount > 1)
                        {
                            vertexSunLuminosity        += (float)getSunLuminosity(blocPositionOcclusion) / 15;
                            vertexArtificialLuminosity += (float)getArtificialLuminosity(blocPositionOcclusion) / 15;
                            mixCount++;
                        }
                    }
                    vertexSunLuminosity        = Math.Max(vertexSunLuminosity, 0.0f) / mixCount;
                    vertexArtificialLuminosity = Math.Max(vertexArtificialLuminosity, 0.0f) / mixCount;
                }

                vertices[i] = new VertexPositionNormalTextureColor(p, listNormals[(byte)side], uv, vertexSunLuminosity, vertexArtificialLuminosity, occlusionLuminosity);
            }
            return(vertices);
        }
Ejemplo n.º 2
0
        public VertexPositionNormalTextureColor[] createPlantFace(Point3d position, int textureNumber)
        {
            VertexPositionNormalTextureColor[] vertices = new VertexPositionNormalTextureColor[24];

            float artificialLuminosity = (float)getArtificialLuminosity(position + FirstBlocAbsolutPosition) / 15;
            float sunLuminosity        = (float)getSunLuminosity(position + FirstBlocAbsolutPosition) / 15;

            for (int i = 0; i < plantVerticesPositions.Length; i++)
            {
                Vector3 vertexPosition = plantVerticesPositions[i] + position.ToVector3();

                float decalX = (float)(textureNumber % 16) * (1.0f / 16.0f);
                float decalY = (float)(textureNumber / 16) * (1.0f / 16.0f);
                var   uv     = new Vector2(((1.0f / 16.0f) * plantVerticesUvs[i].X) + decalX, ((1.0f / 16.0f) * plantVerticesUvs[i].Y) + decalY);

                vertices[i] = new VertexPositionNormalTextureColor(vertexPosition, new Vector3(0, 0, 0), uv, sunLuminosity, artificialLuminosity, 1);
            }
            return(vertices);
        }