示例#1
0
        /// <summary>
        /// Calcula los datos necesarios para poder generar la superficie indicada por las secciones
        /// contiguas indicadas en la colección de secciones. A través de esta calcula los vértices,
        /// normales e índices correspondientes a la superficie a representar.
        /// </summary>
        protected virtual void BuildSurfaceDataBuffers()
        {
            IList <double> vertices = new List <double>();
            IList <int>    indices;
            //IList<int> indices = new List<int>();
            IList <double> normales      = new List <double>();
            IndexStrategy  indexStrategy = new IndexStrategy();
            Seccion        seccion;

            //int indexCount = 0;

            // Armo la lista de vertices e indices. Esta ultima pensada que
            // se arma con TRIANGLE.
            for (int i = 0; i < secciones.Count; i++)
            {
                seccion = secciones[i];

                for (int j = 0; j < seccion.Vertices.Count; j++)
                {
                    // Vertices
                    vertices.Add(seccion.Vertices[j].X);
                    vertices.Add(seccion.Vertices[j].Y);
                    vertices.Add(seccion.Vertices[j].Z);

                    // Normales
                    //Punto normal = this.GetNormalForVertex(seccion, j);
                    Punto normal = this.CalculateNormalForPunto(j, seccion.Vertices[j], i, seccion);
                    normales.Add(normal.X);
                    normales.Add(normal.Y);
                    normales.Add(normal.Z);
                }
            }

            // Indices
            indices = indexStrategy.GetIndexForSecciones(this.RENDER_MODE, secciones);

            this.vertex  = vertices.ToArray <double>();
            this.normals = normales.ToArray <double>();
            this.indexes = indices.ToArray <int>();
        }
示例#2
0
        /// <summary>
        /// Calcula los datos necesarios para poder generar la superficie indicada por las secciones
        /// contiguas indicadas en la colección de secciones. A través de esta calcula los vértices,
        /// normales e índices correspondientes a la superficie a representar.
        /// </summary>
        protected virtual void BuildSurfaceDataBuffers()
        {
            IList<double> vertices = new List<double>();
            IList<int> indices;
            //IList<int> indices = new List<int>();
            IList<double> normales = new List<double>();
            IndexStrategy indexStrategy = new IndexStrategy();
            Seccion seccion;
            //int indexCount = 0;

            // Armo la lista de vertices e indices. Esta ultima pensada que
            // se arma con TRIANGLE.
            for (int i = 0; i < secciones.Count; i++)
            {
                seccion = secciones[i];

                for (int j = 0; j < seccion.Vertices.Count; j++)
                {
                    // Vertices
                    vertices.Add(seccion.Vertices[j].X);
                    vertices.Add(seccion.Vertices[j].Y);
                    vertices.Add(seccion.Vertices[j].Z);

                    // Normales
                    //Punto normal = this.GetNormalForVertex(seccion, j);
                    Punto normal = this.CalculateNormalForPunto(j, seccion.Vertices[j], i, seccion);
                    normales.Add(normal.X);
                    normales.Add(normal.Y);
                    normales.Add(normal.Z);
                }
            }

            // Indices
            indices = indexStrategy.GetIndexForSecciones(this.RENDER_MODE, secciones);

            this.vertex = vertices.ToArray<double>();
            this.normals = normales.ToArray<double>();
            this.indexes = indices.ToArray<int>();
        }