示例#1
0
 private void Init(VertexFlags flags)
 {
     ImportNormalBox.Enabled = flags.HasFlag(VertexFlags.Normals);
     ImportUV0Box.Enabled    = flags.HasFlag(VertexFlags.TexCoords0);
     ImportUV1Box.Enabled    = flags.HasFlag(VertexFlags.TexCoords1);
     ImportUV2Box.Enabled    = flags.HasFlag(VertexFlags.TexCoords2);
     ImportUV7Box.Enabled    = flags.HasFlag(VertexFlags.ShadowTexture);
     FlipUVBox.Enabled       = false;
 }
        private void Init(VertexFlags flags, int i)
        {
            string text = string.Format("{0} LOD: {1}", Language.GetString("$MODEL_OPTIONS_TEXT"), i.ToString());

            ModelOptionsText.Text = text;

            options = new Dictionary <string, bool>();
            options.Add("NORMALS", false);
            options.Add("TANGENTS", false);
            options.Add("DIFFUSE", false);
            options.Add("UV1", false);
            options.Add("UV2", false);
            options.Add("AO", false);
            options.Add("FLIP_UV", false);
            options.Add("COLOR0", false);
            options.Add("COLOR1", false);

            ImportNormalBox.Enabled  = flags.HasFlag(VertexFlags.Normals);
            ImportTangentBox.Enabled = flags.HasFlag(VertexFlags.Tangent);
            ImportDiffuseBox.Enabled = flags.HasFlag(VertexFlags.TexCoords0);
            ImportUV1Box.Enabled     = flags.HasFlag(VertexFlags.TexCoords1);
            ImportUV2Box.Enabled     = flags.HasFlag(VertexFlags.TexCoords2);
            ImportAOBox.Enabled      = flags.HasFlag(VertexFlags.ShadowTexture);
            ImportColor0Box.Enabled  = flags.HasFlag(VertexFlags.Color);
            ImportColor1Box.Enabled  = flags.HasFlag(VertexFlags.Color1);
            FlipUVBox.Enabled        = false;
        }
示例#3
0
        public Dictionary <VertexFlags, VertexOffset> GetVertexOffsets(out int stride)
        {
            Dictionary <VertexFlags, VertexOffset> dictionary = new Dictionary <VertexFlags, VertexOffset>();
            int num = 0;

            foreach (VertexFlags vertexFlags in VertexFlagOrder)
            {
                if (VertexDecleration.HasFlag(vertexFlags))
                {
                    int vertexComponentLength = GetVertexComponentLength(vertexFlags);
                    if (vertexComponentLength > 0)
                    {
                        VertexOffset vertexOffset = new VertexOffset()
                        {
                            Offset = num,
                            Length = vertexComponentLength
                        };
                        dictionary.Add(vertexFlags, vertexOffset);
                        num += vertexComponentLength;
                    }
                }
            }
            stride = num;
            return(dictionary);
        }
示例#4
0
        /*
         * Position.X = 2 Bytes / Half;
         * Position.Y = 2 Bytes / Half;
         * Position.Z = 2 Bytes / Half;
         * Position.W = 2 Bytes / Half;
         *  Also
         *      Tangent.X = 1 Bytes (1st Bytes of Position.W)
         *      Tangent.Y = 1 Bytes (2nd Bytes of Position.W)
         * Normal.X = 1 Bytes / Byte.
         * Normal.Y = 1 Bytes / Byte.
         * Normal.Z = 1 Bytes / Byte.
         * Normal.W = 1 Bytes / Bytes.
         *
         *  Also
         *      Tangent.W = 1 Bytes (1st Bytes of Normal.W)
         *
         *
         * */
        public static Vertex DecompressVertex(byte[] data, VertexFlags declaration, Vector3 offset, float scale, Dictionary <VertexFlags, ResourceTypes.FrameResource.FrameLOD.VertexOffset> offsets)
        {
            Vertex vertex = new Vertex();

            if (declaration.HasFlag(VertexFlags.Position))
            {
                int startIndex = offsets[VertexFlags.Position].Offset;
                var output     = ReadPositionDataFromVB(data, startIndex, scale, offset);
                vertex.Position = Vector3Extenders.FromVector4(output);
                vertex.Binormal = new Vector3(output.W);
            }

            if (declaration.HasFlag(VertexFlags.Tangent))
            {
                int startIndex = offsets[VertexFlags.Position].Offset;
                vertex.Tangent = ReadTangentDataFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.Normals))
            {
                int startIndex = offsets[VertexFlags.Normals].Offset;
                vertex.Normal = ReadNormalDataFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.Skin))
            {
                int startIndex = offsets[VertexFlags.Skin].Offset;
                vertex.BoneWeights = ReadWeightsFromVB(data, startIndex);
                vertex.BoneIDs     = ReadBonesFromVB(data, startIndex + 4);
            }

            if (declaration.HasFlag(VertexFlags.Color))
            {
                int startIndex = offsets[VertexFlags.Color].Offset;
                vertex.Color0 = ReadColorFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.Color1))
            {
                int startIndex = offsets[VertexFlags.Color1].Offset;
                vertex.Color1 = ReadColorFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.TexCoords0))
            {
                int startIndex = offsets[VertexFlags.TexCoords0].Offset;
                vertex.UVs[0] = ReadTexcoordFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.TexCoords1))
            {
                int startIndex = offsets[VertexFlags.TexCoords1].Offset;
                vertex.UVs[1] = ReadTexcoordFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.TexCoords2))
            {
                int startIndex = offsets[VertexFlags.TexCoords2].Offset;
                vertex.UVs[2] = ReadTexcoordFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.ShadowTexture))
            {
                int startIndex = offsets[VertexFlags.ShadowTexture].Offset;
                vertex.UVs[3] = ReadTexcoordFromVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.BBCoeffs))
            {
                int startIndex = offsets[VertexFlags.BBCoeffs].Offset;
                vertex.BBCoeffs = ReadBBCoeffsVB(data, startIndex);
            }

            if (declaration.HasFlag(VertexFlags.DamageGroup))
            {
                int startIndex = offsets[VertexFlags.DamageGroup].Offset;
                vertex.DamageGroup = ReadDamageGroupFromVB(data, startIndex);
            }

            // We only try to calculate binormal vector if we have the correct tangent space data so far..
            if (declaration.HasFlag(VertexFlags.Normals) && declaration.HasFlag(VertexFlags.Tangent))
            {
                Vector4 positionW = new Vector4(vertex.Position, vertex.Binormal.X);
                vertex.Binormal = CalculateBinormal(positionW, vertex.Tangent, vertex.Normal);
            }
            return(vertex);
        }