internal void Recompute(RmvMesh mesh) { //throw new NotImplementedException(); }
public void UpdateOffsets() { for (int lodIndex = 0; lodIndex < Header.LodCount; lodIndex++) { for (var modelIndex = 0; modelIndex < MeshList[lodIndex].Length; modelIndex++) { var header = MeshList[lodIndex][modelIndex].Header; header.UpdateHeader(MeshList[lodIndex][modelIndex].Mesh, MeshList[lodIndex][modelIndex].Textures, MeshList[lodIndex][modelIndex].AttachmentPoints); MeshList[lodIndex][modelIndex].Header = header; } } var headerOffset = (uint)(ByteHelper.GetSize <RmvModelHeader>() + GetLodHeaderSize() * Header.LodCount); uint modelOffset = 0; for (int lodIndex = 0; lodIndex < Header.LodCount; lodIndex++) { var lodHeader = LodHeaders[lodIndex]; lodHeader.MeshCount = (uint)MeshList[lodIndex].Length; lodHeader.TotalLodVertexSize = (uint)MeshList[lodIndex].Sum(x => x.Header.VertexCount * RmvMesh.GetVertexSize(x.Header.VertextType)); lodHeader.TotalLodIndexSize = (uint)MeshList[lodIndex].Sum(x => x.Header.FaceCount * sizeof(ushort)); lodHeader.FirstMeshOffset = headerOffset + modelOffset; LodHeaders[lodIndex] = lodHeader; modelOffset += (uint)MeshList[lodIndex].Sum(x => x.Header.ModelSize); } }
public RmvMesh CreateRmvMesh() { RmvMesh mesh = new RmvMesh(); mesh.IndexList = GetIndexBuffer().ToArray(); if (_vertedFormat == VertexFormat.Default) { mesh.VertexList = new DefaultVertex[VertexCount()]; for (int i = 0; i < mesh.VertexList.Length; i++) { _vertexArray[i].Normal = Vector3.Normalize(_vertexArray[i].Normal); _vertexArray[i].BiNormal = Vector3.Normalize(_vertexArray[i].BiNormal); _vertexArray[i].Tangent = Vector3.Normalize(_vertexArray[i].Tangent); mesh.VertexList[i] = new DefaultVertex( new RmvVector4(_vertexArray[i].Position.X, _vertexArray[i].Position.Y, _vertexArray[i].Position.Z, 1), new RmvVector2(_vertexArray[i].TextureCoordinate.X, _vertexArray[i].TextureCoordinate.Y), new RmvVector3(_vertexArray[i].Normal.X, _vertexArray[i].Normal.Y, _vertexArray[i].Normal.Z), new RmvVector3(_vertexArray[i].BiNormal.X, _vertexArray[i].BiNormal.Y, _vertexArray[i].BiNormal.Z), new RmvVector3(_vertexArray[i].Tangent.X, _vertexArray[i].Tangent.Y, _vertexArray[i].Tangent.Z) ); } } else if (_vertedFormat == VertexFormat.Weighted) { mesh.VertexList = new WeightedVertex[VertexCount()]; for (int i = 0; i < mesh.VertexList.Length; i++) { _vertexArray[i].Normal = Vector3.Normalize(_vertexArray[i].Normal); _vertexArray[i].BiNormal = Vector3.Normalize(_vertexArray[i].BiNormal); _vertexArray[i].Tangent = Vector3.Normalize(_vertexArray[i].Tangent); mesh.VertexList[i] = new WeightedVertex( new RmvVector4(_vertexArray[i].Position.X, _vertexArray[i].Position.Y, _vertexArray[i].Position.Z, 1), new RmvVector2(_vertexArray[i].TextureCoordinate.X, _vertexArray[i].TextureCoordinate.Y), new RmvVector3(_vertexArray[i].Normal.X, _vertexArray[i].Normal.Y, _vertexArray[i].Normal.Z), new RmvVector3(_vertexArray[i].BiNormal.X, _vertexArray[i].BiNormal.Y, _vertexArray[i].BiNormal.Z), new RmvVector3(_vertexArray[i].Tangent.X, _vertexArray[i].Tangent.Y, _vertexArray[i].Tangent.Z), new BaseVertex.BoneInformation[2] { new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.X, _vertexArray[i].BlendWeights.X), new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.Y, _vertexArray[i].BlendWeights.Y), }); } } else if (_vertedFormat == VertexFormat.Cinematic) { mesh.VertexList = new CinematicVertex[VertexCount()]; for (int i = 0; i < mesh.VertexList.Length; i++) { _vertexArray[i].Normal = Vector3.Normalize(_vertexArray[i].Normal); _vertexArray[i].BiNormal = Vector3.Normalize(_vertexArray[i].BiNormal); _vertexArray[i].Tangent = Vector3.Normalize(_vertexArray[i].Tangent); mesh.VertexList[i] = new CinematicVertex( new RmvVector4(_vertexArray[i].Position.X, _vertexArray[i].Position.Y, _vertexArray[i].Position.Z, 1), new RmvVector2(_vertexArray[i].TextureCoordinate.X, _vertexArray[i].TextureCoordinate.Y), new RmvVector3(_vertexArray[i].Normal.X, _vertexArray[i].Normal.Y, _vertexArray[i].Normal.Z), new RmvVector3(_vertexArray[i].BiNormal.X, _vertexArray[i].BiNormal.Y, _vertexArray[i].BiNormal.Z), new RmvVector3(_vertexArray[i].Tangent.X, _vertexArray[i].Tangent.Y, _vertexArray[i].Tangent.Z), new BaseVertex.BoneInformation[4] { new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.X, _vertexArray[i].BlendWeights.X), new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.Y, _vertexArray[i].BlendWeights.Y), new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.Z, _vertexArray[i].BlendWeights.Z), new BaseVertex.BoneInformation((byte)_vertexArray[i].BlendIndices.W, _vertexArray[i].BlendWeights.W) }); } } else { throw new Exception("Unknown vertex format"); } return(mesh); }