/// <summary>
 /// <para>Instanciate a new <see cref="TerrainVertex"/>.</para>
 /// </summary>
 /// <param name="value"></param>
 public TerrainVertex(VertexPositionNormalTextureTangentBinormal value)
 {
     this._bufferIndice = 0;
     this._lastUsedIteration = -1;
     this._references = new Vector<QuadNode>();
     this._value = value;
 }
Beispiel #2
0
        public Floor(GraphicsDevice graphics, Texture2D texture, Texture2D normalMap, ushort width, ushort height, Vector3 position)
            : base(null, position, 0)
        {
            _texture   = texture;
            _normalMap = normalMap;
            _position  = position;

            VertexPositionNormalTextureTangentBinormal[] verticeData = new VertexPositionNormalTextureTangentBinormal[width * height * 6];
            ushort index = 0;

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x, 0, y);
                    verticeData[index].TextureCoordinate = new Vector2(0, 0);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x + 1, 0, y);
                    verticeData[index].TextureCoordinate = new Vector2(1, 0);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x, 0, y + 1);
                    verticeData[index].TextureCoordinate = new Vector2(0, 1);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    _primitiveCount++;

                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x, 0, y + 1);
                    verticeData[index].TextureCoordinate = new Vector2(0, 1);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x + 1, 0, y);
                    verticeData[index].TextureCoordinate = new Vector2(1, 0);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    verticeData[index]                   = new VertexPositionNormalTextureTangentBinormal();
                    verticeData[index].Position          = new Vector3(x + 1, 0, y + 1);
                    verticeData[index].TextureCoordinate = new Vector2(1, 1);
                    verticeData[index].Normal            = Vector3.Up;
                    verticeData[index].Tangent           = Vector3.Forward;
                    verticeData[index].Binormal          = Vector3.Cross(Vector3.Up, Vector3.Forward);
                    index++;

                    _primitiveCount++;
                }
            }

            _vertexBuffer = new VertexBuffer(graphics, typeof(VertexPositionNormalTextureTangentBinormal), verticeData.Length, BufferUsage.WriteOnly);
            _vertexBuffer.SetData(verticeData);
        }