Beispiel #1
0
        /// <summary>
        /// Builds the vertex buffer using vertices with position, normal, and four sets of texture data.
        /// </summary>
        public void BuildVertices_PositionNormalTextured4()
        {
            GraphicsStream stream;

            DataCore.VertexFormats.PositionNormalTextured4[] tri =
                new DataCore.VertexFormats.PositionNormalTextured4[_page.TerrainPatch.NumVertices];

            for (int i = 0; i < tri.Length; i++)
            {
                tri[i].Position = _page.TerrainPatch.Vertices[i].Position;
                tri[i].Normal   = _page.TerrainPatch.Vertices[i].Normal;

                if (_page.TerrainPatch.NumTextures > 0)
                {
                    for (int j = 0; j < _page.TerrainPatch.NumTextures && j < 4; j++)
                    {
                        tri[i].SetTextureCoordinates(_page.TerrainPatch.GetTextureCoordinateList(j)[i],
                                                     j);
                    }
                }
                else
                {
                    tri[i].SetTextureCoordinates(new Vector2(0f, 0f), 0);
                }
            }

            if (_vb != null)
            {
                if (!_vb.Disposed)
                {
                    _vb.Dispose();
                }

                _vb = null;
            }

            _vb = new D3D.VertexBuffer(typeof(DataCore.VertexFormats.PositionNormalTextured4),
                                       tri.Length, _viewport.Device, D3D.Usage.WriteOnly,
                                       DataCore.VertexFormats.PositionNormalTextured4.Format, D3D.Pool.Managed);

            stream = _vb.Lock(0, 0, D3D.LockFlags.None);
            stream.Write(tri);
            _vb.Unlock();

            _vbSize = tri.Length;
        }
Beispiel #2
0
        /// <summary>
        /// Builds the vertex buffer using vertices with position, normal, and four sets of texture data.
        /// </summary>
        public void BuildVertices_PositionNormalTextured4()
        {
            GraphicsStream stream;
            DataCore.VertexFormats.PositionNormalTextured4[] tri =
                new DataCore.VertexFormats.PositionNormalTextured4[_page.TerrainPatch.NumVertices];

            for ( int i = 0; i < tri.Length; i++ )
            {
                tri[i].Position = _page.TerrainPatch.Vertices[i].Position;
                tri[i].Normal = _page.TerrainPatch.Vertices[i].Normal;

                if ( _page.TerrainPatch.NumTextures > 0 )
                {
                    for ( int j = 0; j < _page.TerrainPatch.NumTextures && j < 4; j++ )
                        tri[i].SetTextureCoordinates( _page.TerrainPatch.GetTextureCoordinateList( j )[i],
                            j );
                }
                else
                    tri[i].SetTextureCoordinates( new Vector2( 0f, 0f ), 0 );
            }

            if ( _vb != null )
            {
                if ( !_vb.Disposed )
                    _vb.Dispose();

                _vb = null;
            }

            _vb = new D3D.VertexBuffer( typeof( DataCore.VertexFormats.PositionNormalTextured4 ),
                tri.Length, _viewport.Device, D3D.Usage.WriteOnly,
                DataCore.VertexFormats.PositionNormalTextured4.Format, D3D.Pool.Managed );

            stream = _vb.Lock( 0, 0, D3D.LockFlags.None );
            stream.Write( tri );
            _vb.Unlock();

            _vbSize = tri.Length;
        }