Exemplo n.º 1
0
        static void ReadMeshElements(MeshData data, ImportOptions importOptions, ref Matrix4 transform)
        {
            ReadUvSets(data);

            //flip with disabled FlipUVs, no flip when enabled
            if (!importOptions.ImportPostProcessFlags.HasFlag(ImportPostProcessFlags.FlipUVs))
            {
                CalcMiscProcess.FlipUVs(data.Vertices, data.VertexComponents);

                //ToDo : !!! Доделать FlipUV для Materials - там тоже Flip для Transform текстуры  .... tex->UVScaling(); tex->UVTranslation();
            }
            ReadColor(data);
            TransformVertices(data, transform);

            int uvSetIndexForNormalsAndTangents = 0;             //ToDo : пока 0, может не всегда?

            if (3 <= data.PolygonSize)
            {
                ReadNormals(data, importOptions, uvSetIndexForNormalsAndTangents, data.CalcCache, ref transform);
                if (importOptions.ImportPostProcessFlags.HasFlag(ImportPostProcessFlags.FixInfacingNormals) && data.NormalsSource != TangentsAndNormalsSource.None)
                {
                    if (CalcNormalsProcess.FixInfacingNormals(data.Vertices))
                    {
                        FbxImportLog.LogMessage(data.Node, "Infacing Normals Fixed");
                    }
                }

                ReadTangents(data, importOptions, uvSetIndexForNormalsAndTangents, data.CalcCache, ref transform);
            }
        }
Exemplo n.º 2
0
        //const float DefaultSmoothingAngleInRadians = (float)( 175f * Math.PI / 180 );

        public static void CalculateNormals(VertexInfo[] vertices, bool normalizeVectorNormal)
        {
            if (vertices.Length == 0)
            {
                return;
            }

            foreach (var polygonIndexRange in CalcMiscProcess.EnumeratePolygons(vertices))
            {
                CalculateNormalForFace(vertices, polygonIndexRange, normalizeVectorNormal);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Requirements : normals and UV coordinates must be present.
 /// </summary>
 /// <param name="vertices"></param>
 /// <param name="tangents"></param>
 /// <param name="bitangents"></param>
 /// <param name="getTextureCoord">if null then texCoord0 is used, if not null this delegete than takes the necessary texCoord</param>
 public static void CalculateTangents(VertexInfo[] vertices, out Vector3F[] tangents, out Vector3F[] bitangents, GetTextureCoord getTextureCoord = null)
 {
     tangents   = new Vector3F[vertices.Length];
     bitangents = new Vector3F[vertices.Length];
     if (vertices.Length == 0)
     {
         return;
     }
     foreach (var polygonIndexRange in CalcMiscProcess.EnumeratePolygons(vertices))
     {
         CalculateTangentForFace(vertices, polygonIndexRange, tangents, bitangents, getTextureCoord);
     }
     //SmoothTangents( vertices, tangents, bitangents, FbxMath.ComputePositionEpsilon( vertices ), maxSmoothingAngleInRadians );
 }