public XnaBoneWeightChannel(MeshBuilder mb, VertexContainer vc, JointList joints) : base(mb) { try { _indicesChannel = (from c in vc.VertexChannels where c.Contains(VertexElementUsage.BlendIndices) select c).First(); _weightChannel = (from c in vc.VertexChannels where c.Contains(VertexElementUsage.BlendWeight) select c).First(); } catch (Exception) { throw new Exception("Missing blend indices or weights"); } _joints = joints; _vertexSize = vc.VertexSize; _indicesOffset = _indicesChannel.Source.Offset; _weightOffset = _weightChannel.Source.Offset; this.Create(); }
void OnChannelInfoReceived(string name, ChannelInfo info) { m_containerSize = info.container_size; //m_packageSize = info.package_size; m_frameInterval = info.frame_interval; m_combinedFrames = info.combined_frames; m_streamInfoURL = info.stream_info; vPack = new VertexContainer(info.package_size, info.container_size); #if UNITY_WEBGL m_audioURL = info.audio_clip; #else m_audioInfoURL = info.audio_info; #endif vertsBuf = new float[info.meshes.Count][]; vertsBuf_old = new float[info.meshes.Count][]; m_meshSizes = info.meshSizes; m_materialSizes = info.materialSizes; m_textureSizes = info.textureSizes; m_meshNames = info.meshes; m_materialNames = info.materials; m_textureNames = info.textures; m_combinedDataURL = info.data; Invoke("TryRequestCombinedData", 0.1f); m_streamRefreshInterval = 1.0f; }
public void Start() { meshObjects = new Hashtable(); basisMeshes = new Hashtable(); for (int i = 0; i < shapeKeys.shapeKeys.Length; i++) { // Lookup the mesh and collect the list of shape keys for each mesh // Also grab a copy of the basis mesh so we always apply values // against the basis. GameObject meshObject = ((ShapeKey)shapeKeys.shapeKeys[i]).meshObject; if (!meshObjects.Contains(meshObject)) { List <ShapeKey> s = new List <ShapeKey>(); s.Add(shapeKeys.shapeKeys[i]); VertexContainer verts = new VertexContainer(); verts.vertices = (Vector3[])((ShapeKey)shapeKeys.shapeKeys[i]).getVertices().Clone(); meshObjects.Add(meshObject, s); basisMeshes.Add(meshObject, verts); } else { ((List <ShapeKey>)meshObjects[meshObject]).Add(shapeKeys.shapeKeys[i]); } } }
/// <summary> /// GetTriangleVertices /// </summary> /// <param name="coordinates"></param> /// <returns>VertexContainer</returns> public VertexContainer GetTriangleVertices(string coordinates) { // ROWS ARE LETTERS // COLUMNS ARE NUMBERS try { string row = coordinates[0].ToString().ToUpper(); string colstr = coordinates[1].ToString(); int col = Convert.ToInt32(colstr); var vertexContainer = new VertexContainer(); vertexContainer.Vertices = new List <Vertex>(); Vertex v1 = new Vertex(); Vertex v2 = new Vertex(); Vertex v3 = new Vertex(); int rowNum = (int)(row.ToCharArray()[0]) - 65; int colNum = col - 1; if (colNum % 2 != 0) { // even numbered columns (e.g. A2, A4, etc.) v1.X = (colNum / 2) * 10 + 10; v1.Y = rowNum * 10 + 10; v1.Name = "V1"; v2.X = v1.X - 10; v2.Y = v1.Y - 10; v2.Name = "V2"; v3.X = v1.X; v3.Y = v1.Y - 10; v3.Name = "V3"; } else { // even numbered columns (e.g. A2, A4, etc.) v1.X = (colNum / 2) * 10; v1.Y = rowNum * 10 + 10; v1.Name = "V1"; v2.X = v1.X; v2.Y = v1.Y - 10; v2.Name = "V2"; v3.X = v1.X + 10; v3.Y = v1.Y; v3.Name = "V3"; } vertexContainer.Vertices.Add(v1); vertexContainer.Vertices.Add(v2); vertexContainer.Vertices.Add(v3); return(vertexContainer); } catch { throw new Exception("Input was not in a correct format"); } }
private static void AddVertexContainer(GXVertexDecompressor decom, List <VertexContainer <MeleeVertex> > vertexContainers, DatPolygon polygon, GXDisplayList displayList) { List <MeleeVertex> vertices = new List <MeleeVertex>(); List <int> vertexIndices = new List <int>(); for (int i = 0; i < displayList.Indices.Length; i++) { vertexIndices.Add(i); } vertices.AddRange(ConvertVerts(decom.GetFormattedVertices(displayList, polygon))); PrimitiveType primitiveType = MeleeDatToOpenGL.GetGLPrimitiveType(displayList.PrimitiveType); VertexContainer <MeleeVertex> vertexContainer = new VertexContainer <MeleeVertex>(vertices, vertexIndices, primitiveType); vertexContainers.Add(vertexContainer); }
public void VerifyIdInSameExpression_AllOk() { var A = new CircularEntity("A"); var B = new CircularEntity("B"); var D = new CircularEntity("D"); A = A + (B + B + D) + B; var expression = A.AsExpression(f => f.Children); var vertexA = VertexContainer <CircularEntity> .GetEntityId(expression.Graph.Vertexes[0].Entity).Id; var vertexB = VertexContainer <CircularEntity> .GetEntityId(expression.Graph.Vertexes[1].Entity).Id; var vertexD = VertexContainer <CircularEntity> .GetEntityId(expression.Graph.Vertexes[2].Entity).Id; Assert.Equal(vertexA, expression.Graph.Vertexes[0].Id); Assert.Equal(vertexB, expression.Graph.Vertexes[1].Id); Assert.Equal(vertexD, expression.Graph.Vertexes[2].Id); }
public void VerifyIdentity_ShouldEqualsVertexContainer() { var A = new CircularEntity("A"); var B = new CircularEntity("B"); var C = new CircularEntity("C"); A = A + (B + C); var expression = A.AsExpression(f => f.Children); var vertexA = VertexContainer <CircularEntity> .GetEntityId(A).Id; var vertexB = VertexContainer <CircularEntity> .GetEntityId(B).Id; var vertexC = VertexContainer <CircularEntity> .GetEntityId(C).Id; Assert.Equal(3, expression.Count); Assert.Equal($"[{vertexA}]", expression[0].Path.Identity); Assert.Equal($"[{vertexA}].[{vertexB}]", expression[1].Path.Identity); Assert.Equal($"[{vertexA}].[{vertexB}].[{vertexC}]", expression[2].Path.Identity); }
private void TestMultiLevel(Func <CircularEntity> action) { Clear(); var objA = action(); var serializer = objA.AsExpression().GetSerializer <ComplexEntityExpressionSerializer>(); serializer.GetEntityIdCallback = item => VertexContainer <object> .GetEntityId(item.Entity).Id; var expressionStr = serializer.Serialize(); var deserializer = new ComplexEntityExpressionDeserializer(); var objB = deserializer.Deserialize <CircularEntity>(expressionStr); var jsonSettings = new JsonSerializerSettings { Formatting = Formatting.Indented, PreserveReferencesHandling = PreserveReferencesHandling.Objects }; var jsonA = JsonConvert.SerializeObject(objA, jsonSettings); var jsonB = JsonConvert.SerializeObject(objB, jsonSettings); Assert.Equal(jsonA, jsonB); }
public void Start() { meshObjects = new Hashtable (); basisMeshes = new Hashtable (); for (int i = 0; i < shapeKeys.shapeKeys.Length; i++) { // Lookup the mesh and collect the list of shape keys for each mesh // Also grab a copy of the basis mesh so we always apply values // against the basis. GameObject meshObject = ((ShapeKey)shapeKeys.shapeKeys[i]).meshObject; if (!meshObjects.Contains(meshObject)) { List<ShapeKey> s = new List<ShapeKey>(); s.Add(shapeKeys.shapeKeys[i]); VertexContainer verts = new VertexContainer(); verts.vertices = (Vector3[])((ShapeKey)shapeKeys.shapeKeys[i]).getVertices().Clone(); meshObjects.Add(meshObject, s); basisMeshes.Add(meshObject, verts); } else { ((List<ShapeKey>)meshObjects[meshObject]).Add(shapeKeys.shapeKeys[i]); } } }
/// <summary> /// Creates MeshContent instances for each mesh in the COLLADA model and attaches /// them to the NodeContent root. /// </summary> void CreateMeshes() { foreach (Mesh mesh in collada.Meshes) { foreach (MeshPart part in mesh.MeshParts) { var material = materials[part.MaterialName]; meshBuilder = MeshBuilder.StartMesh(mesh.Name); meshBuilder.SwapWindingOrder = false; meshBuilder.MergeDuplicatePositions = false; meshBuilder.SetMaterial(material); meshBuilder.Name = mesh.Name; // Positions CVertexChannel posChannel = part.Vertices.VertexChannels.Where(c => c.Description.VertexElementUsage == VertexElementUsage.Position). FirstOrDefault(); VertexContainer container = part.Vertices; float[] data = container.Vertices; int posOffset = posChannel.Source.Offset; for (int i = 0; i < container.Vertices.Length; i += container.VertexSize) { Vector3 pos = new Vector3(data[i + posOffset + 0], data[i + posOffset + 1], data[i + posOffset + 2]); meshBuilder.CreatePosition(pos); } // Vertex channels other than position List <XnaVertexChannel> channels = new List <XnaVertexChannel>(); foreach (CVertexChannel cvChannel in part.Vertices.VertexChannels) { switch (cvChannel.Description.VertexElementUsage) { case VertexElementUsage.Position: // Position is already created above break; case VertexElementUsage.BlendWeight: case VertexElementUsage.BlendIndices: // When bone weight collections are used these two // channels get added separately later if (UseBoneWeightCollection || excludeBlendWeights) { break; } else { goto default; } default: // standard channel like texcoord, normal etc. channels.Add(new XnaVertexChannel(meshBuilder, cvChannel)); break; } } // BoneWeightCollection vertex channel if (UseBoneWeightCollection && !excludeBlendWeights) { try { channels.Add(new XnaBoneWeightChannel(meshBuilder, part.Vertices, collada.Joints)); } catch (Exception) { importerContext.Logger.LogMessage("No skinning information found"); } } // Triangles for (int i = 0; i < part.Indices.Length; i += 3) { for (int j = i; j < i + 3; j++) { // Set channel components (other than position) foreach (var channel in channels) { channel.SetData(j); } meshBuilder.AddTriangleVertex(part.Indices[j]); } } MeshContent meshContent = meshBuilder.FinishMesh(); if (material.OpaqueData.Count > 0) { // Copy opaque data from material to mesh for convenience and // to make it compatible to Normal Mapping sample from App Hub foreach (var pair in material.OpaqueData) { meshContent.OpaqueData.Add(pair.Key, pair.Value); } } else { importerContext.Logger.LogWarning(null, null, "No opaque data in mesh"); } rootNode.Children.Add(meshContent); } } }
public void CreateVertexContainer(int packageSize, int containerSize) { m_VertexContainer = new VertexContainer(packageSize, containerSize); }