예제 #1
0
        public void Init()
        {
            ObjMeshContainer = new ObjMeshContainer();
            var line = "o Cube";

            _createNewMeshStrategy.ProccesLine(line, ObjMeshContainer);
        }
예제 #2
0
        public override void ChargeBuffer(ObjMeshContainer objMeshContainer, Mesh dxMesh, int index)
        {
            var objMesh = objMeshContainer.ListObjMesh[index];

            //Cargar VertexBuffer
            using (var vb = dxMesh.VertexBuffer)
            {
                var data = vb.Lock(0, 0, LockFlags.None);
                var v    = new VertexColorVertex();
                objMesh.FaceTrianglesList.ForEach(face =>
                {
                    v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V1) - 1];
                    v.Normal   = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn1) - 1];
                    v.Color    = -16777047; //TODO que corresponde poner aca con respecto obj Mesh
                    data.Write(v);
                    v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V2) - 1];
                    v.Normal   = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn2) - 1];
                    v.Color    = -16777047; //TODO que corresponde poner aca con respecto obj Mesh
                    data.Write(v);
                    v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V3) - 1];
                    v.Normal   = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn3) - 1];
                    v.Color    = -16777047; //TODO que corresponde poner aca con respecto obj Mesh
                    data.Write(v);
                });
                vb.Unlock();
            }

            ChargeIndexBuffer(objMesh, dxMesh);
        }
예제 #3
0
        /// <summary>
        ///    Procesa la linea para crear un nuevo Poligono
        /// </summary>
        /// <param name="line">Clase ObjMaterialLader</param>
        /// <param name="objMeshContainer">Clase ObjMaterialLader</param>
        public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
        {
            var f            = CheckFaceFormatCorrect(line);
            var arrayVertex1 = CheckTriangleFormatCorrect(f[0]);
            var arrayVertex2 = CheckTriangleFormatCorrect(f[1]);
            var arrayVertex3 = CheckTriangleFormatCorrect(f[2]);

            var face = new FaceTriangle(arrayVertex1[Vertex], arrayVertex2[Vertex], arrayVertex3[Vertex]);

            if (arrayVertex1.Length + arrayVertex2.Length + arrayVertex3.Length == CompleteArray)
            {
                face.SetTexturesValues(arrayVertex1[Texture], arrayVertex2[Texture], arrayVertex3[Texture]);
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(arrayVertex1[Texture]))
                {
                    face.SetTexturesValues(arrayVertex1[Texture], arrayVertex2[Texture], arrayVertex3[Texture]);
                }
                face.SetNormalValues(arrayVertex1[Normal], arrayVertex2[Normal], arrayVertex3[Normal]);
            }
            face.Usemtl = objMeshContainer.ListObjMesh.Last().Usemtl.Count > 0 ? objMeshContainer.ListObjMesh.Last().Usemtl.Last() : null;

            objMeshContainer.ListObjMesh.Last().FaceTriangles.Add(face);
        }
예제 #4
0
        public void Init()
        {
            ObjMeshContainer = new ObjMeshContainer();
            var line = "o Cube";

            _createNewMeshStrategy.ProccesLine(line, ObjMeshContainer);
            line = "usemtl Material.001";
            _addUsemtlStrategy.ProccesLine(line, ObjMeshContainer);
        }
예제 #5
0
        /// <summary>
        ///    Procesa la linea para habilitar el shadow.
        /// </summary>
        /// <param name="line">Clase ObjMaterialLader</param>
        /// <param name="objMeshContainer">Clase ObjMaterialLader</param>
        public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
        {
            string attribute = CheckAttribute(line); //

            if (attribute.Equals("1"))
            {
                objMeshContainer.ListObjMesh.Last().Shadow = true;
            }
        }
예제 #6
0
        /// <summary>
        ///    Procesa la linea para crear un vector normal
        /// </summary>
        /// <param name="line">Clase ObjMaterialLader</param>
        /// <param name="objMeshContainer">Clase ObjMaterialLader</param>
        public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
        {
            var indices = line.Split(' ');

            if (indices.Length != 4 && indices.Length != 3)
            {
                throw new ArgumentException("El Archivo .obj no fue exportado de forma triangular");
            }
            var vertex = CreateVector3(line);

            objMeshContainer.VertexListVn.Add((Vector3)vertex);
        }
 /// <summary>
 ///    Carga el buffer del mesh de DirectX
 /// </summary>
 /// <param name="objMesh">ObjMesh</param>
 /// <param name="dxMesh"></param>
 /// <param name="index"></param>
 /// <returns>MeshBuilder</returns>
 public abstract void ChargeBuffer(ObjMeshContainer objMesh, Mesh dxMesh, int index);
예제 #8
0
        /// <summary>
        ///    Procesa la linea para guardar el material que va a usar los siguientes poligonos
        /// </summary>
        /// <param name="line">Clase ObjMaterialLader</param>
        /// <param name="objMeshContainer">Clase ObjMaterialLader</param>
        public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
        {
            var attribute = CheckAttribute(line);

            objMeshContainer.ListObjMesh.Last().Usemtl.Add(attribute);
        }
예제 #9
0
 public abstract void ProccesLine(string line, ObjMeshContainer objMeshContainer);
예제 #10
0
        /// <summary>
        ///    Procesa la linea para crear un nuevo ObjMesh
        /// </summary>
        /// <param name="line">Clase ObjMaterialLader</param>
        /// <param name="objMeshContainer">Clase ObjMaterialLader</param>
        public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
        {
            var split = line.Split(' ');

            objMeshContainer.ListObjMesh.Add(new ObjMesh(split[nameObject]));
        }
 public void Init()
 {
     _objMeshContainer = new ObjMeshContainer();
 }
예제 #12
0
 public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
 {
     return;
 }
 public override void ProccesLine(string line, ObjMeshContainer objMeshContainer)
 {
     //There is no need to perform any operation.
 }