Пример #1
0
        public void Reload()
        {
            var meshData = Actor.mMesh.mMeshData;

            var heightMapStream = new FileStream(mHeightMapPath, FileMode.Open, FileAccess.Read);
            var heightmap       = Texture2D.FromStream(mGraphics, heightMapStream);

            heightMapStream.Close();

            if (heightmap.Height == mHeight && heightmap.Width == mWidth)
            {
                var textureStream = new FileStream(mTexturePath, FileMode.Open, FileAccess.Read);
                meshData.mMaterials[0].mDiffuseMap = Texture2D.FromStream(mGraphics, textureStream);
                textureStream.Close();

                LoadVertices(heightmap);

                Actor.mMesh.UpdateData();

                mGrass.Generate();
            }
        }
Пример #2
0
        public Terrain(ContentManager content, GraphicsDevice device, string heightMapPath, string texturePath)
        {
            mContent  = content;
            mGraphics = device;

            mHeightMapPath = heightMapPath;
            mTexturePath   = texturePath;

            var meshData = new MeshData();

            var heightMapStream = new FileStream(heightMapPath, FileMode.Open, FileAccess.Read);
            var heightmap       = Texture2D.FromStream(device, heightMapStream);

            heightMapStream.Close();

            mWidth  = heightmap.Width;
            mHeight = heightmap.Height;

            meshData.mVertices = new VertexPositionTexture[mWidth * mHeight];
            meshData.mIndices  = new int[(mWidth * 2 + 2) * (mHeight - 1)];

            var subData  = new MeshData.SubData();
            var material = new Material();

            var textureStream = new FileStream(texturePath, FileMode.Open, FileAccess.Read);

            material.mDiffuseMap      = Texture2D.FromStream(device, textureStream);
            material.DiffuseMapStream = textureStream;
            material.mGraphicsDevice  = device;
            textureStream.Close();

            material.mDiffuseColor = new Vector3(1.0f);

            subData.mIndicesOffset = 0;
            subData.mMaterialIndex = 0;
            subData.mNumPrimitives = (heightmap.Width * 2 + 2) * (heightmap.Height - 1);

            meshData.mMaterials.Add(material);
            meshData.mSubDatas.Add(subData);

            meshData.mPrimitiveType      = PrimitiveType.TriangleStrip;
            meshData.mTotalNumPrimitives = (heightmap.Width * 2 + 2) * (heightmap.Height - 1);

            meshData.mBoundingSphere.Radius = (float)Math.Sqrt(Math.Pow(heightmap.Width / 2.0f, 2) + Math.Pow(heightmap.Height / 2.0f, 2));
            meshData.mIsTerrain             = true;

            Actor = new Actor(new Mesh.Mesh(mGraphics, meshData), null)
            {
                mCastShadow = false
            };
            Size = mWidth;

            LoadVertices(heightmap);

            LoadIndices();

            Actor.mMesh.UpdateData();

            mGrass = new Grass(this);
            mGrass.Generate();
        }