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; }
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); }
/* * 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); }